Лента активности

Описание

Лента активности представляет из себя таблицу cms_actions_log в которую записываются события, совершаемые пользователями на сайте (добавление контента, изменение профиля и т.п.). В системе существует класс cmsActions, который предоставляет API для добавления событий в ленту, получения их списка и удаления.

В базе лента использует 2 таблицы:

сms_actions

содержит список типов всех событий, имеет поля:

  • id - идентификатор типа событий
  • component - компонент, в котором происходит данный тип событий (photos, blogs)
  • name - условное название типа событий, латинские буквы (add_photo, add_post)
  • title - заголовок типа событий, для показа в админке («добавление фотографии», «добавление поста»)
  • message - шаблон сообщения в ленте, для событий данного типа («добавляет фото %s в альбом %s»)
  • is_tracked - регистрировать события данного типа? (0 или 1)
  • is_visible - показывать события данного типа в ленте? (0 или 1)

по идее, каждый компонент при установке должен добавлять сюда записи про все свои события через API. Например для комментов будет 1 событие (add_comment) и добавляется оно так:

        cmsActions::registerAction(
                                    'comments',
                                    array(
                                            'name'=>'add_comment',
                                            'title'=>'Добавление комментария',
                                            'message'=>'добавляет %s| на странице %s'
                                         )
                                  );

Функция registerAction() имеет 2 параметра - название компонента и массив с описанием типа событий. Поля is_tracked и is_visible включены по-умолчанию. Но пока имеет смысл добавлять записи в эту таблицу напрямую через базу (так быстрее), а в migrate просто потом вставим ее дамп.

Самое интересное в этой таблице это поле message. Оно содержит шаблон сообщения о событии. В ленте каждое событие выводится по такой формуле:

<Кто> <что добавил> <куда> <когда>

Например:

  • Администратор добавляет комментарий на странице Первая новость 3 минуты назад

кусок текста »добавляет комментарий на странице Первая новость» получен из шаблона »добавляет %s| на странице %s»

т.е. первый %s будет заменен на «что добавили» (объект) а второй - «куда добавили» (место).

Но некоторые юзеры захотят выводить в ленте только объект, без места. Тогда в настройках модуля «Лента» они отключают вывод мест и событие начинает выводиться так:

  • Администратор добавляет комментарий 3 минуты назад

Для этого в тексте шаблона (message) находится вертикальная черта (после первого %s). Если вывод места отключат, то будет браться не весь шаблон, а только до черты.

сms_actions_log

содержит саму ленту, т.е. сюда записываются события по мере их возникновения:

  • id - идентификатор события
  • action_id - идентификатор типа события из таблицы cms_actions
  • pubdate - дата, когда событие произошло
  • user_id - идентификатор пользователя, совершившего событие
  • object - название объекта события (название фото или заголовок поста в блоге)
  • object_url - адрес страницы с объектом (/photos/photo123.html, /blogs/myblog/mypost.html)
  • object_id - идентификатор объекта (id из таблицы cms_photo_files или cms_blog_posts)
  • target - название места, где находится объект (название фотоальбома, блога)
  • target_url - адрес страницы с местом (/photos/123, /blogs/myblog)
  • target_id - идентификатор места (id фотоальбома или блога)
  • description - краткое описание события (текст комментария, html-код маленькой фотографии и т.п.)

Пример записи события, при добавлении фотки:

        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);
 
разработка/компоненты/лента_активности.txt · Последние изменения: 2010/10/19 09:51 От admin