Модуль «Команда проекта»
Страница состава, которая собирается из служебных ролей и привилегий
Модуль добавляет на сайт страницу /mod/team со списком тех, кто ведёт проект: администрация, модераторы, хелперы. Состав не заводится руками — он берётся из того, что уже есть в панели.
Откуда берутся люди
Два источника, и оба вы уже используете:
| Источник | Где отметить | Куда попадает человек |
|---|---|---|
| Роль сайта | Основное → Роли, флажок «Служебная роль» | В общий раздел — роль сайта не привязана к серверу |
| Привилегия | E-Commerce → Донат → Группы, флажок «Служебная роль» | В раздел того сервера, где привилегия выдана |
Дальше ничего делать не нужно: выдали человеку роль «Модератор» на сервере — он появился на странице, срок привилегии истёк — исчез. Один и тот же человек может стоять в нескольких разделах: например, разработчик в общем разделе и владелец на конкретном сервере.
Подпись под ником — это название роли или привилегии, а её цвет задаётся там же, где и сам флажок.
Что настраивается в модуле
Расширения → Команда проекта. Здесь только описание — строка под подписью, вроде «Отвечает за техчасть». Она переводится на другие языки как обычный контент.
Заголовок страницы, подзаголовок и название общего раздела лежат в настройках модуля на странице «Модули».
Установка
Модуль живёт в отдельном репозитории UnicoreCMS-modules и лежит там исходниками. Как собрать серверную часть, написано в README репозитория: клоны кладутся рядом, потому что контракт unicore-api в npm не публикуется.
pnpm --filter unicore-module-team run buildДальше как с любым модулем: соберите архив из module.json, package.json, server, client, admin, locales, поставьте его через панель, включите и пересоберите фронты. Подробности — в Установке.
Что внутри — для разработчика
Модуль интересен как пример: почти всё он берёт у ядра и почти ничего не хранит.
- состав приходит из фасада
core().staff.members()— ядро само сводит роли сайта и выданные привилегии; - названия и иконки разделов — из
core().servers.all(); - своя таблица одна,
mod_team_notes, и в ней только описание; - описание переводится через
@Translatable('mod.team.note', ['text']), редактор в панели подключается одной строкой.
См. Контракт для модулей.