Лента
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 больше не требуется. Была создана логика отката для проверки серии представлений за вас:
/river/{$type}/{$subtype}/{$action_type}: например,river/object/blog/create— только действиеcreateпопадёт в это представлениеriver/{$type}/{$subtype}/default: например,river/object/blog/default— вся активность ленты дляobjectblogпопадёт сюдаriver/{$type}/{$action_type}: например,river/object/create— все действияcreateдляobjectпопадут сюдаriver/{$type}/default: например,river/object/default— все действия для всехobjectпопадут сюдаriver/elements/layout: окончательное представление отката, это всегда должно вызываться в любом из представлений ленты для создания согласованного макета
И type, и subtype основаны на type и subtype object_guid, для которого был создан элемент ленты.
Резюме
Если параметр summary не предоставлен для river/elements/layout, представление попытается создать его для вас. Базовый результат будет текстом с текстом Кто-то сделал что-то с Объектом, где Кто-то основан на subject_guid, а Объект — на object_guid. Для обоих Кто-то и Объект будут созданы ссылки. Эти ссылки передаются в серию языковых ключей, чтобы вы могли создать осмысленное резюме.
Языковые ключи:
river:{$type}:{$subtype}:{$action_type}: например,river:object:blog:createriver:{$type}:{$subtype}:default: например,river:object:blog:defaultriver:{$type}:{$action_type}: например,river:object:createriver:{$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_guidGUID пользователя, выполняющего действие$vars['item']->object_guidGUID сущности, над которой выполняется действие
Временные метки и т.д. будут сгенерированы для вас.
Например, плагин блога использует следующий код для своего представления ленты:
$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 по умолчанию.