Лента активности представляет из себя таблицу cms_actions_log в которую записываются события, совершаемые пользователями на сайте (добавление контента, изменение профиля и т.п.). В системе существует класс cmsActions, который предоставляет API для добавления событий в ленту, получения их списка и удаления.
В базе лента использует 2 таблицы:
содержит список типов всех событий, имеет поля:
по идее, каждый компонент при установке должен добавлять сюда записи про все свои события через API. Например для комментов будет 1 событие (add_comment) и добавляется оно так:
cmsActions::registerAction( 'comments', array( 'name'=>'add_comment', 'title'=>'Добавление комментария', 'message'=>'добавляет %s| на странице %s' ) );
Функция registerAction() имеет 2 параметра - название компонента и массив с описанием типа событий. Поля is_tracked и is_visible включены по-умолчанию. Но пока имеет смысл добавлять записи в эту таблицу напрямую через базу (так быстрее), а в migrate просто потом вставим ее дамп.
Самое интересное в этой таблице это поле message. Оно содержит шаблон сообщения о событии. В ленте каждое событие выводится по такой формуле:
<Кто> <что добавил> <куда> <когда>
Например:
кусок текста »добавляет комментарий на странице Первая новость» получен из шаблона »добавляет %s| на странице %s»
т.е. первый %s будет заменен на «что добавили» (объект) а второй - «куда добавили» (место).
Но некоторые юзеры захотят выводить в ленте только объект, без места. Тогда в настройках модуля «Лента» они отключают вывод мест и событие начинает выводиться так:
Для этого в тексте шаблона (message) находится вертикальная черта (после первого %s). Если вывод места отключат, то будет браться не весь шаблон, а только до черты.
содержит саму ленту, т.е. сюда записываются события по мере их возникновения:
Пример записи события, при добавлении фотки:
cmsActions::log('add_photo', array( 'object' => $photo['title'], 'object_url' => '/photos/photo'.$photo_id.'.html', 'object_id'=>$photo_id, 'target' => $album_title, 'target_url' => '/photos/'.$photo['album_id'], 'target_id' => $photo['album_id'], 'description' => '<a href="/photos/photo'.$photo_id.'.html" class="act_photo"> <img border="0" src="/images/photos/small/'.$photo['filename'].'" /> </a>' ));
при удалении добавленного ранее объекта, нужно удалить событие из ленты:
cmsActions::removeObjectLog('add_photo', $id);
Реклама спонсоров
База объектов. Аренда и продажа недвижимости.
svrealty.ru
Форум поддержки. Описание методов и программ обучения.
autocomp.ru
Описание продукции. Сообщество о моде и красоте.
silklife.ru