Функции меню Albireo CMS
Функция menu1
Функция menu1 является комплексным генератором навигационных меню. Она считывает структуру меню и его дизайн из отдельных конфигурационных файлов, что позволяет легко изменять как состав ссылок, так и их внешний вид. Функция поддерживает создание многоуровневых (выпадающих) меню, для работы которых используется JavaScript-фреймворк Alpine.js.
Сигнатура
function menu1(): string
Аргументы
Функция не принимает аргументов. Вся конфигурация происходит через поля текущей страницы и конфигурационные файлы.
menu: Имя файла со структурой меню (например, 'menu.php'). Загружается изCONFIG_DIR.menu.design: Имя файла с настройками дизайна меню (например, 'menu-design1.php').use.alpine: Для корректной работы выпадающих меню на странице должен быть подключен Alpine.js (по умолчанию включено).
Результат
Возвращает HTML-строку (string) с готовой разметкой меню. Если меню отключено в полях страницы (menu: -), возвращает пустую строку.
Примеры использования
1. Файл конфигурации структуры меню
В этом файле описываются пункты меню и их иерархия.
// Содержимое файла CONFIG_DIR/menu.php (реальный файл см. в конфигурации)
return [
['name' => 'Главная', 'link' => '/'],
[
'name' => 'Услуги',
'marker' => ' ▼', // Кастомный маркер для выпадающего меню
'submenu' => [
['name' => 'Веб-разработка', 'link' => '/services/webdev'],
['name' => 'Дизайн', 'link' => '/services/design'],
]
],
['name' => 'Контакты', 'link' => '/contacts', 'classAdd' => 'highlight'],
['raw' => '<a href="/login" class="[[top.base]] login-btn">Войти</a>'], // Сырой HTML
];
2. Файл конфигурации дизайна меню
Здесь задаются CSS-классы для различных элементов меню.
// Содержимое файла menu-design1.php (реальный файл см. в конфигурации)
return [
'top.base' => 'menu-item', // Базовый класс для всех элементов верхнего уровня
'top.class' => 'text-white hover:text-yellow', // Класс для обычного элемента
'top.active' => 'text-yellow font-bold', // Класс для активного элемента
'submenu.container' => 'submenu-dropdown', // Класс для контейнера подменю
'submenu.class' => 'submenu-item', // Класс для элемента подменю
'button.open' => 'bg-gray-700', // Класс, добавляемый к кнопке при открытии подменю
];
3. Вызов в шаблоне
Для вывода меню достаточно просто вызвать функцию в нужном месте.
<header>
<nav>
<?= menu1() ?>
</nav>
</header>
Примечания
- Гибкость: Функция очень гибкая. Можно настраивать классы, иконки, маркеры, режим открытия подменю (по клику или наведению), а также вставлять сырой HTML-код.
- Активный пункт: Функция автоматически определяет текущую страницу по
CURRENT_URL['urlFull']и применяет к соответствующему пункту меню активный CSS-класс.
Функция menuDoc
Функция menuDoc предназначена для автоматического построения сложного навигационного меню для разделов документации. В отличие от стандартных меню, структура menuDoc определяется не отдельным файлом, а непосредственно полями самих страниц. Это позволяет легко управлять порядком, вложенностью и названиями пунктов, просто редактируя файлы страниц.
Сигнатура
function menuDoc(string $configFile): string
Аргументы
- string
$configFile - Имя файла конфигурации (относительно
CONFIG_DIR), который содержит настройки внешнего вида меню: CSS-классы для секций, заголовков, ссылок и т.д.
Результат
Возвращает HTML-строку (string) с готовой разметкой меню на основе тегов <details> и <summary>. Если файл конфигурации не найден, вернет сообщение об ошибке.
Примеры использования
Для работы функции требуется настройка в трех местах: файл конфигурации дизайна, поля страниц и вызов в шаблоне.
1. Файл конфигурации дизайна (например, CONFIG_DIR/doc-options.php)
Здесь определяются CSS-классы для элементов меню.
return [
'type' => 'doc', // Тип страниц, которые попадут в меню
'defaultIcon' => 'bi-file-earmark-text', // Иконка по умолчанию
'section' => 'menu-section',
'sectionActive' => 'menu-section-active',
'header' => 'menu-header',
'headerActive' => 'menu-header-active',
'list' => 'menu-list',
'link' => 'menu-link',
'linkActive' => 'menu-link-active',
'linkActiveAdd' => ' <span class="current-marker">●</span>',
];
2. Поля страниц документации
Структура меню определяется полями doc.menu.title и doc.menu.path.
# --- Файл страницы 1 --- title: Введение type: doc doc.menu.title: Введение doc.menu.path: 01_Introduction # --- Файл страницы 2 --- title: Установка type: doc doc.menu.title: Установка системы doc.menu.path: 02_GettingStarted.01_Installation doc.menu.icon: bi-download # --- Файл страницы 3 --- title: Настройка type: doc doc.menu.title: Базовая настройка doc.menu.path: 02_GettingStarted.02_Configuration # --- Файл страницы 4 (без меню) --- title: Служебная страница type: doc # Отсутствует doc.menu.title, поэтому в меню не попадет
Логика doc.menu.path:
- Сортировка: Числовой префикс
01_,02_используется для сортировки, но не отображается в названии группы. - Группировка: Текст до первой точки (например,
GettingStarted) используется как название группы/секции в меню (тег<summary>). - Вложенность: Каждая точка
.создает новый уровень вложенности, который отображается отступом.
3. Вызов в шаблоне
В файле шаблона (например, в сайдбаре) достаточно просто вызвать функцию.
<aside class="documentation-sidebar">
<?= menuDoc('doc-options.php') ?>
</aside>
Примечания
- HTML-структура: Меню строится на основе HTML5-элементов
<details>и<summary>, что обеспечивает базовую функциональность раскрывающихся списков без JavaScript. - Активный пункт: Функция автоматически определяет текущую активную страницу и применяет к ней и её родительской секции соответствующие CSS-классы, указанные в файле конфигурации.