Files
ave-cms/help/modules/contributions.md
T
2026-07-30 11:56:32 +03:00

6.4 KiB
Raw Permalink Blame History

Вклады модуля в интерфейс

К разделу «Модули»

Установленный и включённый модуль может декларативно добавить пункт меню, действие в шапку, виджет дашборда, строки в общий колокольчик уведомлений и результаты в глобальный поиск панели. Все вклады принадлежат admin_extension в module.php:

'admin_extension' => array(
    'url' => '/notes',
    'icon' => 'ti ti-notes',
    'feature' => 'Личные заметки',
    'menu' => array(array(
        'code' => 'modules_example', 'label' => 'Пример', 'url' => '/example',
        'permission' => 'view_example', 'parent' => 'modules',
    )),
    'header' => array(/* действие в шапке */),
    'dashboard' => array(/* виджет главной */),
    'notifications' => array(/* строки колокольчика */),
    'search' => array(
        'provider' => array(GlobalSearchProvider::class, 'search'),
        'permission' => 'view_example',
        'priority' => 60,
        'limit' => 8,
    ),
),

Подробные руководства

Вклад Руководство
Дашборд Разработка виджета
Шапка Кнопка, dropdown и модальное действие
Колокольчик Поставщик уведомлений
Левое меню Descriptor module.php
Глобальный поиск Раздел ниже

Результаты в глобальном поиске

Провайдер search($query, $limit) подключает сущности модуля к палитре Ctrl+K. Он возвращает список:

return array(array(
    'type' => 'example',
    'group' => 'Примеры',
    'title' => 'Запись #15',
    'subtitle' => 'Дополнительная информация',
    'url' => '/example/15/edit',
    'icon' => 'ti ti-box',
    'score' => 100,
));

Нужно обязательно заполнить title и локальный url. Адрес начинается с / и указывается без имени папки панели: AVE.cms добавит его самостоятельно. group объединяет строки под заголовком, subtitle помогает отличить похожие записи, icon принимает класс Tabler Icons, а score поднимает точные совпадения внутри группы.

Поиск вызывается во время набора текста, поэтому используйте индекс или один короткий SQL-запрос с жёстким LIMIT. Право проверяется до запуска provider. Выключенный или удалённый модуль ничего не добавляет. Ошибка одного модуля не ломает общую палитру.

Общее описание вклада

header, dashboard и notifications принимают одно описание или список описаний. Общие свойства:

Ключ Назначение
code Стабильный код вклада внутри модуля. Особенно важен для порядка виджетов.
provider Поставщик данных: callable без аргументов, возвращающий массив.
data Статический массив вместо поставщика данных.
permission Право, без которого вклад и provider не выполняются.
visible Необязательный callable без аргументов для дополнительной видимости.
sort_order Начальный порядок; меньшее значение располагается раньше.
label, description, icon Представление вклада в настройках интерфейса.

Поставщик вызывается только после проверки права и visible. Его исключение не ломает панель управления, но вклад получит пустые данные. Не рассматривайте это как обработку ошибок: ожидаемые сбои обрабатывайте в provider и журналируйте без секретов.

Доступность и управление

  • Деинсталлированный или выключенный модуль не добавляет UI-вклады.
  • permission проверяется для текущего системного пользователя.
  • На странице Система → Модули администратор может отдельно отключить действие модуля в шапке и его виджет.
  • В Основные настройки → Интерфейс можно менять порядок и видимость элементов дашборда.
  • Уведомления показываются только при положительном count; отдельного общего переключателя размещения для них нет.

Assets

CSS/JS для шапки и дашборда должны регистрироваться в descriptor модуля: эти элементы появляются вне собственного маршрута модуля.

'assets' => array(
    'styles' => array(
        array('url' => ADMINX_BASE . '/modules/Notes/assets/notes.css', 'priority' => 46),
    ),
    'scripts' => array(
        array('url' => ADMINX_BASE . '/modules/Notes/assets/notes.js', 'priority' => 46),
    ),
),

Стили остаются в assets/<module>.less, JavaScript — в файле модуля под пространстве Adminx.<Module>. Общие примитивы (btn, dropdown, section-header, icon-tile, Adminx.Ajax, Adminx.Toast, Adminx.Confirm) переиспользуйте из UI-кита, не создавая параллельные компоненты.