Лента

Elgg нативно поддерживает «ленту», поток активности, содержащий описания действий, выполняемых участниками сайта. Эта страница даёт обзор добавления событий в ленту в плагине Elgg.

Добавление элементов в ленту

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

Здесь мы добавляем элемент ленты, сообщающий, что пользователь создал новый пост в блоге:

<?php

elgg_create_river_item([
        'view' => 'river/object/blog/create',
        'action_type' => 'create',
        'subject_guid' => $blog->owner_guid,
        'object_guid' => $blog->getGUID(),
]);

Все доступные параметры:

  • view => STR Представление, которое будет обрабатывать элемент ленты (должно существовать)

  • action_type => STR Произвольная строка для определения действия (например, „create“, „update“, „vote“, „review“ и т.д.)

  • subject_guid => INT GUID сущности, выполняющей действие (по умолчанию: guid авторизованного пользователя)

  • object_guid => INT GUID сущности, над которой выполняется действие

  • target_guid => INT GUID контейнера сущности-объекта (необязательно)

  • access_id => INT ID доступа элемента ленты (по умолчанию: такой же, как у объекта)

  • posted => INT UNIX-временная метка элемента ленты (по умолчанию: сейчас)

  • annotation_id => INT ID аннотации, связанный с этой записью в ленте (необязательно)

Когда элемент удаляется или изменяется, элемент ленты будет обновлён автоматически.

Представления ленты

Начиная с Elgg 3.0 параметр view больше не требуется. Была создана логика отката для проверки серии представлений за вас:

  1. /river/{$type}/{$subtype}/{$action_type}: например, river/object/blog/create — только действие create попадёт в это представление

  2. river/{$type}/{$subtype}/default: например, river/object/blog/default — вся активность ленты для object blog попадёт сюда

  3. river/{$type}/{$action_type}: например, river/object/create — все действия create для object попадут сюда

  4. river/{$type}/default: например, river/object/default — все действия для всех object попадут сюда

  5. river/elements/layout: окончательное представление отката, это всегда должно вызываться в любом из представлений ленты для создания согласованного макета

И type, и subtype основаны на type и subtype object_guid, для которого был создан элемент ленты.

Резюме

Если параметр summary не предоставлен для river/elements/layout, представление попытается создать его для вас. Базовый результат будет текстом с текстом Кто-то сделал что-то с Объектом, где Кто-то основан на subject_guid, а Объект — на object_guid. Для обоих Кто-то и Объект будут созданы ссылки. Эти ссылки передаются в серию языковых ключей, чтобы вы могли создать осмысленное резюме.

Языковые ключи:

  1. river:{$type}:{$subtype}:{$action_type}: например, river:object:blog:create

  2. river:{$type}:{$subtype}:default: например, river:object:blog:default

  3. river:{$type}:{$action_type}: например, river:object:create

  4. river:{$type}:default: например, river:object:default

Пользовательское представление ленты

Если вы хотите добавить дополнительную информацию в представление ленты, например, вложение (изображение, встраивание YouTube и т.д.), вы должны указать view при создании элемента ленты. Это представление ДОЛЖНО существовать.

Мы рекомендуем /river/{type}/{subtype}/{action}, где:

  • {type} — это тип сущности контента, который нас интересует (object для объектов, user для пользователей и т.д.)

  • {subtype} — это подтип сущности контента, который нас интересует (blog для блогов, photo_album для альбомов и т.д.)

  • {action} — это действие, которое произошло (create, update и т.д.)

Информация об элементе ленты будет передана в объекте с именем $vars['item'], который содержит следующие важные параметры:

  • $vars['item']->subject_guid GUID пользователя, выполняющего действие

  • $vars['item']->object_guid GUID сущности, над которой выполняется действие

Временные метки и т.д. будут сгенерированы для вас.

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

$item = elgg_extract('item', $vars);
if (!$item instanceof ElggRiverItem) {
        return;
}

$blog = $item->getObjectEntity();
if (!$blog instanceof ElggBlog) {
        return;
}

$vars['message'] = $blog->getExcerpt();

echo elgg_view('river/elements/layout', $vars);

Возможность

Сущности могут иметь возможность river_emittable. Эта возможность определяет, можно ли фильтровать тип/подтип сущности на страницах активности и, если не запрошено явно, фильтруется из запросов elgg_get_river(). Если сущность использует EntityEditAction по умолчанию, возможность также определяет, создаётся ли активность ленты create по умолчанию.