Разработка и Конфигурация · 10 мин
Как сделать меню в 1С-Битрикс
Как создать и настроить меню в 1С-Битрикс: типы меню, файлы .menu.php, компонент bitrix:menu, шаблоны, многоуровневые меню и типичные ошибки.
Меню в 1С-Битрикс строится на связке трёх элементов: типа меню, файлов .тип.menu.php в разделах сайта и компонента bitrix:menu, который выводит пункты в шаблоне. Понимание этой связки позволяет собрать как простое одноуровневое меню, так и многоуровневую навигацию с выпадающими подразделами, не прибегая к ручной верстке ссылок.
Основная логика такова: в корне сайта и в каждом разделе лежит файл меню с массивом пунктов, а компонент в шаблоне читает эти файлы снизу вверх и формирует дерево. Пункты можно редактировать через визуальный интерфейс «Редактировать меню» прямо на странице, либо вручную через файловую структуру или административный раздел.
Ниже разобран полный цикл: от создания типа меню до вывода многоуровневой навигации и настройки шаблона, а также типичные ошибки, из-за которых меню не отображается или показывает лишние пункты.
Как устроено меню в Битриксе: типы, файлы и компонент
Тип меню — это именованный набор пунктов: например, top для верхнего горизонтального меню и left для бокового. Одна страница может содержать несколько меню разных типов, каждое со своим шаблоном вывода. Список типов задаётся в административном разделе: Настройки → Настройки продукта → Сайты → Список сайтов → открыть нужный сайт → вкладка с полем «Типы меню».
Пункты меню хранятся в файлах вида .top.menu.php (точка, тип меню, слово menu, расширение). Такой файл в корне сайта задаёт пункты верхнего уровня, а одноимённый файл внутри раздела — пункты для этого раздела. Компонент bitrix:menu умеет объединять пункты из файлов разных уровней, формируя дерево заданной глубины.
Важно понимать разницу между статическим и динамическим наполнением. Файлы меню задают пункты вручную, а компонент menu.sections (расширение шаблона) может подставлять разделы инфоблока автоматически — так строятся каталоги, где подпункты меню повторяют структуру товарных разделов.
Создание типа меню и первого файла пунктов
Откройте Настройки → Настройки продукта → Сайты → Список сайтов, выберите сайт и в поле «Типы меню» добавьте нужный тип, например top с пояснением «Верхнее меню». Если тип уже существует в стандартной поставке, этот шаг можно пропустить.
Далее перейдите на публичную страницу сайта, включите режим правки (кнопка «Правка» в панели управления) и наведите курсор на область меню. Появится иконка с пунктом «Редактировать меню» — система создаст файл .top.menu.php в текущем разделе и откроет визуальный редактор, где можно добавить пункты: название, ссылку, условие показа.
Альтернатива — создать файл вручную через Контент → Файлы и папки. Структура файла выглядит так:
<?
$aMenuLinks = Array(
Array(
"Главная",
"/",
Array(),
Array(),
""
),
Array(
"Каталог",
"/catalog/",
Array(),
Array(),
""
),
);
?>
Каждый пункт — это массив из пяти элементов: текст ссылки, URL, массив дополнительных ссылок (для подсветки активного пункта на дочерних страницах), массив параметров и условие на PHP. Если условие возвращает false, пункт не выводится — так скрывают разделы для неавторизованных пользователей.
- 1Добавьте тип меню в настройках сайта (Настройки → Сайты → нужный сайт)
- 2Включите режим правки на публичной странице и выберите «Редактировать меню» или создайте файл .top.menu.php вручную
- 3Заполните пункты: название, ссылка, при необходимости условие показа
- 4Разместите компонент bitrix:menu в шаблоне сайта и укажите тип меню
- 5Проверьте отображение в браузере и сбросьте кеш компонента
Вывод меню компонентом bitrix:menu в шаблоне
Компонент размещают в файле header.php шаблона сайта (для верхнего меню) или в footer.php / колонке (для бокового). В визуальном редакторе он находится в группе «Служебные → Меню». Ключевые параметры вызова:
<?$APPLICATION->IncludeComponent(
"bitrix:menu",
"top_menu",
Array(
"ROOT_MENU_TYPE" => "top",
"MENU_CACHE_TYPE" => "A",
"MAX_LEVEL" => "2",
"CHILD_MENU_TYPE" => "left",
"USE_EXT" => "N",
"DELAY" => "N",
"ALLOW_MULTI_SELECT" => "N"
)
);?>
Параметр ROOT_MENU_TYPE задаёт тип меню корневого уровня, MAX_LEVEL — глубину вложенности, CHILD_MENU_TYPE — тип меню для дочерних уровней. Если MAX_LEVEL равен 1, компонент прочитает только файл корня; при значении 2 и выше он подтянет файлы меню из разделов, совпадающих с URL пунктов первого уровня.
Параметр USE_EXT со значением «Y» включает подключение шаблона menu.sections — так подпункты формируются из разделов инфоблока. Это стандартный способ сделать каталог с автоматически обновляющимся меню: при добавлении раздела в инфоблок пункт появляется в меню без ручной правки файлов.
Многоуровневое меню и меню из разделов инфоблока
Для двухуровневого меню создайте файл дочернего типа (например, .left.menu.php) внутри папки раздела. Например, пункт «Каталог» ведёт на /catalog/ — тогда файл /catalog/.left.menu.php задаст подпункты, которые компонент покажет при MAX_LEVEL = 2 и CHILD_MENU_TYPE = left.
Если подпункты должны совпадать с разделами инфоблока, вместо ручных файлов используют USE_EXT = Y и шаблон menu.sections. В настройках этого шаблона указывают инфоблок и глубину разделов. Условие корректной работы: у пунктов первого уровня URL должен совпадать со страницей раздела инфоблока, иначе компонент не поймёт, к какому пункту привязать дерево.
Проверка результата
После настройки откройте страницу раздела и убедитесь, что подпункты видны, активный пункт подсвечен, а при переходе в соседний раздел дерево перестраивается корректно. Проверьте также страницу детального элемента: частая проблема — меню «схлопывается» до первого уровня, потому что URL элемента не совпадает с URL раздела.
Как проверить работу меню
Все пункты из файла .menu.php видны на странице
Часть пунктов пропала — проверьте условия показа и кеш
Текущий раздел выделен, включая дочерние страницы
Подсветка пропадает на внутренних страницах — добавьте URL в массив дополнительных ссылок пункта
Подпункты раздела выводятся на нужной глубине
Подпунктов нет — проверьте MAX_LEVEL, CHILD_MENU_TYPE и наличие файла меню в папке раздела
Кастомизация шаблона меню
Стандартный шаблон компонента выводит простой список. Чтобы изменить вёрстку, скопируйте шаблон через кнопку «Копировать шаблон» в режиме правки — он попадёт в папку /local/templates/ваш_шаблон/components/bitrix/menu/имя_шаблона/. Основной файл — template.php, где в массиве $arResult доступны пункты с полями TEXT, LINK, SELECTED, DEPTH_LEVEL и IS_PARENT.
Дополнительные поля пунктов (иконки, картинки, CSS-классы) задаются через файл .тип.menu_ext.php в разделе или через параметры пункта в массиве $aMenuLinks. В шаблоне они доступны в массиве PARAMS каждого пункта. Это безопасный путь: вы не меняете ядро компонента, и обновления Битрикса не затронут вашу кастомизацию.
Типичные ошибки и их устранение
Чаще всего меню не выводится из-за несовпадения типа меню в файле и в параметрах компонента: файл называется .top.menu.php, а в ROOT_MENU_TYPE указано main. Вторая частая причина — кеш: компонент закешировал пустой результат, и новые пункты не появляются до сброса кеша.
Ещё одна проблема — права доступа. Если пункт ведёт в закрытый раздел, а условие показа не задано, неавторизованный посетитель увидит ссылку на страницу авторизации. Проверяйте меню в режиме инкогнито, чтобы увидеть картину глазами гостя.
FAQ
Как скрыть пункт меню от неавторизованных пользователей?
В пятом элементе массива пункта задайте условие, например $USER->IsAuthorized(). Если выражение возвращает false, пункт не попадёт в результат компонента. Аналогично можно проверять группу пользователя через $USER->InGroup().
Почему меню не обновляется после правки файла .menu.php?
Компонент bitrix:menu кеширует результат. Сбросьте кеш через кнопку «Сбросить кеш» в панели управления на странице или через Настройки → Автокеширование. Если меню собирается из инфоблока, дополнительно проверьте кеш самого инфоблока.
Как сделать разные меню для разных разделов сайта?
Создайте отдельный тип меню для каждой зоны и разместите в шаблоне несколько вызовов bitrix:menu с разными ROOT_MENU_TYPE. Либо используйте один тип, но кладите разные файлы .menu.php в папки разделов — компонент подтянет файл, ближайший к текущей странице.
Можно ли сделать меню из страниц, а не из файлов?
Да, в визуальном редакторе меню есть кнопка «Вставить пункты из структуры» — она автоматически добавляет пункты по файлам и папкам раздела. Для полностью автоматического меню по инфоблоку используйте USE_EXT = Y и шаблон menu.sections.
Как добавить иконку или картинку к пункту меню?
Передайте путь к картинке в четвёртом элементе массива пункта (PARAMS), например Array("ICON" => "/images/icon.png"), и выведите значение в кастомном шаблоне через $arItem["PARAMS"]["ICON"]. Альтернатива — файл .тип.menu_ext.php, где можно расширить пункты произвольными полями.
Меню пропадает на странице детального элемента каталога. Что делать?
Причина обычно в том, что URL элемента не совпадает с URL раздела, к которому привязан пункт. Убедитесь, что в настройках ЧПУ инфоблока адрес элемента строится внутри адреса раздела, и проверьте, что компонент меню размещён в общем шаблоне, а не в шаблоне конкретной страницы.
Что важно запомнить
Меню в Битриксе — это тип меню, файлы .тип.menu.php в разделах и компонент bitrix:menu в шаблоне. Настройте тип, заполните пункты, укажите глубину и тип дочернего меню, кастомизируйте только скопированный шаблон и не забывайте сбрасывать кеш после правок.