Инструменты групп

Группы 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).