В 1С-Битрикс тип меню — это источник данных (пункты и ссылки), а шаблон меню — способ его отрисовки. Одни и те же пункты можно вывести разным оформлением, если понимать, как компонент связывает одно с другим.
/local/templates/<шаблон>/ в файлах вида .top.menu.php, .left.menu.php.Что такое тип меню
Тип меню — это идентификатор набора пунктов меню. Он определяет, в каком файле физически хранятся ссылки. Для каждого раздела сайта тип меню задаёт имя файла: например, тип top хранится в файле .top.menu.php, тип left — в .left.menu.php.
В файле меню находится обычный PHP-массив $aMenuLinks с пунктами: название, ссылка, условия показа, дополнительные параметры. Тип меню отвечает только за данные — он не знает, как эти пункты будут выглядеть на странице.
- top — верхнее (горизонтальное) меню;
- left — левое (боковое) меню раздела;
- bottom — нижнее меню (в футере).
Это лишь распространённые имена по умолчанию — вы можете завести собственные типы под свои задачи.
Что такое шаблон меню
Шаблон меню — это способ визуального вывода пунктов. Он определяет HTML-разметку: теги списка, классы, вложенность подпунктов, подсветку активного пункта. Шаблоны хранятся в папке компонента bitrix:menu внутри шаблона сайта.
Стандартные шаблоны меню, которые поставляются с продуктом:
horizontal_multilevel— многоуровневое горизонтальное меню;vertical_multilevel— многоуровневое вертикальное меню;tree— древовидное меню с раскрытием ветвей;text_menu— простой текстовый список ссылок.
Один и тот же шаблон меню можно применять к разным типам меню, и наоборот — один тип меню выводить разными шаблонами в разных местах сайта.
Как компонент связывает тип и шаблон
Связь между данными и оформлением делает компонент bitrix:menu. В его параметрах указываются одновременно и тип меню, и шаблон вывода:
ROOT_MENU_TYPE— тип меню первого уровня (например,top);MENU_THEME/ имя шаблона компонента — шаблон отрисовки (например,horizontal_multilevel);MAX_LEVEL— сколько уровней вложенности выводить.
Вызов компонента в шаблоне сайта выглядит примерно так:
$APPLICATION->IncludeComponent("bitrix:menu", "horizontal_multilevel", array("ROOT_MENU_TYPE" => "top", "MAX_LEVEL" => 3));
Здесь второй аргумент — это шаблон меню, а параметр ROOT_MENU_TYPE — тип меню. Именно поэтому связь гибкая: поменяв второй аргумент, вы измените оформление, не трогая пункты; поменяв ROOT_MENU_TYPE, выведете другой набор ссылок тем же оформлением.
Настройка типов меню сайта
Список доступных типов меню задаётся в настройках сайта. Чтобы добавить или изменить тип:
- Перейдите в Настройки → Настройки продукта → Сайты → Список сайтов и откройте нужный сайт (либо Настройки → Типы меню в модуле управления структурой).
- Найдите поле Типы меню. Каждая строка — это пара «идентификатор» и «название».
- Идентификатор (например,
top) станет частью имени файла.top.menu.php; название отображается контент-менеджеру при редактировании меню. - Сохраните изменения.
После добавления нового типа он появится в списке выбора при создании меню через публичную часть и в форме редактирования разделов.
Один тип меню — разные шаблоны
Практический смысл разделения — переиспользование данных. Например, тип top вы можете вывести:
| Где на сайте | Тип меню | Шаблон меню |
|---|---|---|
| Шапка (десктоп) | top | horizontal_multilevel |
| Мобильное меню | top | vertical_multilevel |
| Карта сайта / футер | top | text_menu |
Во всех трёх случаях данные берутся из одного файла .top.menu.php. Отредактировав пункты один раз, вы обновите их сразу во всех местах вывода. Это удобно и снижает риск рассинхронизации.
Частые ошибки
Ошибки при работе с типами и шаблонами меню чаще всего связаны с путаницей между данными и оформлением:
- Меню не выводится. В параметре
ROOT_MENU_TYPEуказан тип, для которого нет файла меню в текущем разделе, — Битрикс поднимается по дереву разделов и не находит.тип.menu.php. Создайте меню нужного типа. - Изменили пункт, а он не поменялся в шапке. Скорее всего, шапка выводит другой тип меню. Проверьте
ROOT_MENU_TYPEв вызове компонента в шаблоне сайта. - Хотите сменить оформление и меняете тип меню. Это ошибка: оформление задаёт шаблон компонента (второй аргумент
IncludeComponent), а не тип. Смена типа приведёт к выводу другого набора ссылок. - Новый тип меню не появился в списке. Тип не добавлен в настройках сайта. Пока идентификатор не прописан в поле «Типы меню», система его не предложит в интерфейсе.
- Подпункты не показываются. Параметр
MAX_LEVELравен 1 либо выбран одноуровневый шаблон. УвеличьтеMAX_LEVELи используйте многоуровневый шаблон.
Итог
Тип меню и шаблон меню в 1С-Битрикс — это две независимые сущности: первая отвечает за данные (какие пункты и куда ведут), вторая — за оформление (как они выглядят). Связывает их компонент bitrix:menu через параметр ROOT_MENU_TYPE и имя шаблона.
Такое разделение даёт гибкость: один набор пунктов можно вывести в нескольких местах с разным дизайном, а редактировать ссылки при этом в одном файле. Запомните правило: меняете содержимое — работаете с типом; меняете внешний вид — работаете с шаблоном.