ALBIREO CMS
version: 2025.11.01

Функции меню Albireo CMS

menu1 menuDoc

Функция 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-классы, указанные в файле конфигурации.