Инструменты групп
Группы Elgg позволяют администраторам групп включать/отключать различные инструменты, доступные в группе. Эти инструменты предоставляются другими плагинами, такими как blog или file.
Плагины могут получить доступ к реестру групповых инструментов через elgg()->group_tools.
elgg()->group_tools->register('my-tool', [
'default_on' => false, // default is true
'label' => elgg_echo('my-tool:checkbox:label'),
'priority' => 300, // display this earlier than other modules/tools
]);
Зарегистрированный инструмент будет иметь опцию для переключения в форме редактирования группы и может иметь связанный с ним модуль представления профиля. Чтобы добавить модуль профиля, просто добавьте соответствующее представление как groups/profile/module/<tool_name>. Это представление будет вызываться только если инструмент включён.
Если вы просто хотите вывести список некоторого контента в группе, вы можете использовать представление groups/profile/module с дополнительными параметрами.
entity_type: в сочетании сentity_subtypeможет сгенерировать всё, что нужно модулю
entity_subtype: в сочетании сentity_typeможет сгенерировать всё, что нужно модулю
no_results: пользовательский текст, когда результаты не найдены
Следующее будет сгенерировано автоматически:
title: на основе языкового ключаcollection:<entity_type>:<entity_subtype>:group
content:elgg_list_entities()на основе заданного типа/подтипа
all_link: на основе имени маршрутаcollection:<entity_type>:<entity_subtype>:group
add_link: на основе имени маршрутаadd:<entity_type>:<entity_subtype>:groupи с проверкой прав доступа для заданного типа/подтипа
// file: groups/profile/module/my-tool.php
// if you wish to list some content (eg. files) in the group
// you can use the following
$params = [
'entity_type' => 'object',
'entity_subtype' => 'file',
'no_results' => elgg_echo('file:none'),
];
$params = $params + $vars;
echo elgg_view('groups/profile/module', $params);
В качестве альтернативы вы можете сгенерировать свои собственные заголовок и контент
// file: groups/profile/module/my-tool.php
echo elgg_view('groups/profile/module', [
'title' => elgg_echo('my-tool'),
'content' => 'Hello, world!',
]);
Вы можете программно включать и отключать инструменты для заданной группы:
$group = get_entity($group_guid);
// enables the file tool for the group
$group->enableTool('file');
// disables the file tool for the group
$group->disableTool('file');
Если вы хотите разрешить определённую функцию в группе только если опция группового инструмента включена, вы можете проверить это с помощью \ElggGroup::isToolEnabled($tool_option).
Также возможно использовать функцию привратника для предотвращения доступа к странице группы на основе включённого инструмента.
elgg_group_tool_gatekeeper('file', $group);
См.также
Подробнее о привратниках читайте здесь: Привратники
Если вам нужны настроенные опции группового инструмента для конкретной группы, вы можете использовать функцию elgg()->group_tools->group($group).