-1.87
Рейтинг
0.01
Сила

Mirocow (PHP Developer)

share42 и LiveStreet

Да, я знаю, что об интеграции социальных кнопок скриптом share42 уже пару раз писали. Но оба предложенных варианта не переполнили меня восторгом.

Отступление: На справедливый вопрос «а зачем это вообще нужно?» у меня нету готового ответа. Это SEO. Но базовая интеграция с социальными сетями в каком-то виде, есть в шаблонах изначально. На мой взгляд этого мало, но даже в рамках команды нашего сайта, мы долго обсуждали необходимость дополнительных усилий в этом направлении, и целесообразность применения share42, в частности. Тема глубоко субъективная.

Так вот, плагин для подобной задачи кажется мне слишком тяжёлым решением, а ручная модификация tpl-ей шаблонов — слишком грубым.

В итоге, я решил попробовать прикрутить кнопки применив механизм блоков.

Читать дальше →

ORM, many_to_many и несколько условий

Есть две таблицы Item и Category, связанные связью many_to_many через третью таблицу Link

Отношения Item:
protected $aRelations = array(
        'categories' => array(self::RELATION_TYPE_MANY_TO_MANY, 'PluginA_ModuleItem_EntityCategory', 'category_id', 'db.table.link', 'item_id'),
);

Отношения Category:
protected $aRelations = array(
        'items' => array(self::RELATION_TYPE_MANY_TO_MANY, 'PluginA_ModuleItem_EntityItem', 'item_id', 'db.table.link', 'category_id'),
);


Можно ли через ORM получить Itemы, принадлежащие определеннЫМ категориям и удовлетворяющие определенным условиям самой таблицы Items?.. Если бы речь шла об одной категории там все понятно, плясалось бы «от противного», то есть бралась бы эта самая категория и получались бы по фильтру айтемы, принадлежащие ей. А вот если хочется из нескольких категорий получить? Есть ORM путь или обратно к мэпперам?

Оптимизация ЛС, часть 3

Топик залежался в черновиках, и хотя сегодня Максим уже сделал багфикс, я все же опубликую этот топик в общеобразовательных целях.

В одном из топиков по оптимизации мы уже касались темы доработки класса конфига ЛС. В данном топике рассмотрим ещё одну оптимизацию — заменим создание анонимной функции каждый раз при получении ключа на вызов уже созданного объекта. Изначальный код предложил пользователь empirik и данный код является небольшой его модификацией + результаты тестов.

Читать дальше →

Оптимизация ЛС, часть 2

А пока товарищи в соседнем топике спорят, я провел небольшие замеры и предлагаю взглянуть на некоторые варианты оптимизации.

Продолжаем эксперименты над движком.

Ахтунг! В данной статье будут приведены примеры кода, которые могут нарушить функциональность некоторых весьма хитро-умных плагинов, которые привязаны к этому механизму. Мне не известен ни один такой плагин, но я не исключаю возможность их существования.

В прошлом топике, где я опубликовал полный список стандартных хуков для ЛС 1.0.1, я обратил внимание на хуки, которые начинаются с префикса module_ — хуки, которые постоянно создаются динамически и вызываются парами до и после вызовов методом модулей. Как и было написано в предыдущем топике — хуки вызываются 486 раз, причем само их количество на «чистой» ЛС значится в 161 штуку.

Читать дальше →

Список хуков LiveStreet CMS 1.0.1

На днях написал черновик по списку хуков и так забыл о нем, пока не увидел новое видео от Максима и сразу вспомнил об этом тексте, решив под общий шумок вокруг хуков добавить и эту статью. Я видел разные топики, где спрашивали "есть ли список хуков?". Да, есть. Вот он.

Привожу список стандартных хуков для чистой официальной ЛС 1.0.1, большинство из них неявно прописаны в движке, поэтому попытка найти их вызовы в коде у вас не выйдет т.к. часть их них автоматически формируется ядром движка.
Из стандартной поставки ЛС хуки в сумме вызываются 486 раз, некоторые по нескольку раз. Это нормально. Здесь приведены 161 хук, которые доступны в ЛС 1.0.1, в порядке их вызова, начиная с самого первого, исключая дальнейшие повторения.

Читать дальше →

[Open Source] Решение - «Realtime»


Предисловие
В век постоянного прогресса и движения вперед важно не остаться за бортом, а для этого нужны инструменты позволяющие реагировать на события без промедления.

Вместо пиара
Вконтакте, одноклассники, фэйсбук, твиттер, гугл уже давно используют силу обновлений в реальном времени, создав своим пользователям комфортные условия для общения

Что это
Это инструмент для вас, вашего сайта, разработчиков, позволяющее создавать свои real-time дополнения для livestreet'a. Он состоит из node.js сервера и плагина для livestreet.

Сервер realtime берет на себя роль связующего звена между пользователем и livestreet'ом, который передает серверу данные при наступления запланированного события.

В базовую комплектацию входят:
  • Моментальные уведомления о событиях:
    — новом топике в блоге на который вы подписаны,
    — новом комментарии в вашем топике,
    — ответе на комментарий,
    — новом личном сообщении,
    — ответе на личное сообщение,
    — добавлении вас в друзья
  • Моментальная подгрузка комментариев и личных сообщений для авторизированных пользователей


Цели
Предоставить функционал перечисленный выше, создающий на вашем сайте ощущение вовлечения во все происходящие на сайте события, вплоть до новых комментариев к статьям и личной переписке. Помимо этого дать инструмент для разработчиков неравнодушных к real-time технологиям.

Читать дальше →

Самое узкое место в ЛС - увеличение производительности

Ища пути ускорения движка я постоянно спотыкаюсь об класс конфига (/engine/lib/internal/ConfigSimple/Config.class.php), а именно — меня беспокоит авто замена ключей в конфиге. Такой код мы можем найти в дистрибутиве:

static public function KeyReplace($cfg,$sInstance=self::DEFAULT_CONFIG_INSTANCE) {
  if(is_array($cfg)) {
    foreach($cfg as $k=>$v) {
      $k_replaced = self::KeyReplace($k, $sInstance);
      if($k==$k_replaced) {
        $cfg[$k] = self::KeyReplace($v,$sInstance);
      } else {
        $cfg[$k_replaced] = self::KeyReplace($v,$sInstance);
        unset($cfg[$k]);
      }
    }
  } else {
    if(preg_match('~___([\S|\.|]+)___~Ui',$cfg))
      $cfg = preg_replace_callback(
        '~___([\S|\.]+)___~Ui',
        create_function('$value','return Config::Get($value[1],"'.$sInstance.'");'),
        $cfg
      );
  }
  return $cfg;
}


Читать дальше →

EditComment - плагин редактирования комментов. Да, еще один.

editcommentПлагин EditComment предназначен для включения возможности редактирования сделанных комментариев.

Плагин использует нативную для LS 1.0.1 систему комментирования, не требует хаков темплейтов и, в то же время, обладает гибкостью настройки. Работает с визуальным редактором.
Читать дальше →