Меню и структура сайта в Битрикс: три подхода и их цена
Меню в Битрикс хранится в файлах, а не в базе, и от этого зависит, кто и как будет править его через год. Разбираем три способа собрать меню на сайте с каталогом и то, где каждый из них ломается.

Типовая история: в меню нужен пункт «Доставка», а через неделю выясняется, что подменю не появилось, «Каталог» не подсвечивается на карточке товара, а новые разделы каталога попадают в меню только после правки файла. Причина одна: меню в «1С-Битрикс: Управление сайтом» хранится в файлах, а не в базе. Ниже три способа собрать меню и цена каждого. Текст написан для версии 23.x и новее; названия пунктов админки сверяйте со своей.
Как это устроено
Структура сайта — папки в корне, в каждой лежит index.php. Название раздела для навигационной цепочки хранится в .section.php, в переменной $sSectionName. Меню — файлы вида .тип.menu.php: .top.menu.php, .left.menu.php. Типы меню регистрируются в настройках модуля «Управление структурой».
Пояснение: навигационная цепочка («хлебные крошки») строится компонентом bitrix:breadcrumb и берёт названия разделов из .section.php.
Возьмём схематичный сайт компании: /about/ с подразделами, /services/, /catalog/ на инфоблоке и /contacts/. Нужно верхнее меню, подменю у «О компании» и подменю «Каталога» из разделов инфоблока, которые добавляет контент-менеджер без программиста.
Три подхода
1. Один файл в корне
Выигрываете простоту: файл читается без знаний PHP и правится из визуального редактора меню. Платите вложенностью: подменю нет.
<?php
// /.top.menu.php
$aMenuLinks = Array(
Array('О компании', '/about/', Array(), Array(), ''),
Array('Услуги', '/services/', Array(), Array(), ''),
Array('Каталог', '/catalog/', Array(), Array(), ''),
Array('Контакты', '/contacts/', Array(), Array(), '')
);
Пять элементов пункта: название, ссылка, дополнительные ссылки для подсветки, параметры (в шаблоне доступны как PARAMS) и условие показа в виде PHP-выражения. Пункт подсвечивается, когда адрес страницы начинается со ссылки пункта. Дополнительные ссылки нужны для страниц вне этой папки.
2. Подменю из файлов по папкам
Верхний тип берётся из корня, дочерний — из папки пункта. Корневой файл компонент ищет в текущей папке и поднимается вверх, пока не найдёт. Платите разбросанностью: чтобы найти пункт, надо знать папку.
<?php
// В шаблоне сайта: многоуровневое меню
$APPLICATION->IncludeComponent(
'bitrix:menu',
'horizontal_multilevel',
Array(
'ROOT_MENU_TYPE' => 'top',
'CHILD_MENU_TYPE' => 'left',
'MAX_LEVEL' => '2',
'USE_EXT' => 'Y',
'MENU_CACHE_TYPE' => 'A',
'MENU_CACHE_TIME' => '3600'
)
);
Шаблон должен уметь выводить вложенность. В поставке есть многоуровневые, например horizontal_multilevel, но набор зависит от версии. Подменю «О компании» лежит в /about/.left.menu.php и пишется так же, как корневой файл.
3. Разделы каталога через menu_ext
Файл .left.menu_ext.php рядом с меню дописывает пункты программно. Выигрываете автоматику: новый раздел инфоблока появляется в меню сам. Платите запросами к базе и жёсткой привязкой к адресам инфоблока.
<?php
// /catalog/.left.menu_ext.php
global $APPLICATION;
// Замените IBLOCK_TYPE и IBLOCK_ID на свои значения
$aMenuLinksExt = $APPLICATION->IncludeComponent(
'bitrix:menu.sections',
'',
Array(
'IS_SEF' => 'Y',
'SEF_BASE_URL' => '/catalog/',
'SECTION_PAGE_URL' => '#SECTION_CODE_PATH#/',
'IBLOCK_TYPE' => 'catalog',
'IBLOCK_ID' => '2',
'DEPTH_LEVEL' => '2',
'CACHE_TYPE' => 'A',
'CACHE_TIME' => '3600'
),
false
);
// Добавляем разделы к уже собранным пунктам
$aMenuLinks = array_merge($aMenuLinks, $aMenuLinksExt);
Полный список параметров bitrix:menu.sections сверьте в документации своей версии, особенно то, как компонент ведёт себя с элементами инфоблока.
Сравнение
| Подход | Где живёт | Кто правит | Вложенность | Цена |
|---|---|---|---|---|
| Один файл | /.top.menu.php | Редактор в админке | Один уровень | Подменю нет |
| Файлы по папкам | .left.menu.php в папках | Редактор, знающий структуру | До значения MAX_LEVEL | Меню разбросано |
| menu_ext | Код и инфоблок | Контент-менеджер через инфоблок | По DEPTH_LEVEL | Запросы в базу, привязка к URL |
Меню в Битрикс выглядит как контент, а устроено как код: редактор правит его в интерфейсе, а лежит оно в файле, который через год придётся искать по папкам.
Когда что выбирать
- Подход 1: вложенности нет, пункты меняются реже раза в квартал.
- Подход 2: подменю статичны, правит их человек, который знает структуру папок.
- Подход 3: пункты соответствуют записям инфоблока и должны появляться без разработчика.
Подходы сочетаются. На нашем сайте корень и «О компании» собраны из файлов, а «Каталог» подключён через menu_ext.
Что ломается
Подменю не появилось
Проверяйте по порядку:
- Тип в
CHILD_MENU_TYPEсовпадает с именем файла и зарегистрирован в настройках модуля «Управление структурой». MAX_LEVELбольше единицы.- Файл лежит в папке, на которую ведёт ссылка пункта.
- Для menu_ext включён
USE_EXT. - Сброшен кеш: правка файла руками не всегда сбрасывает кеш компонента меню.
Остальное
- Кракозябры после правки по FTP: файл сохранён не в той кодировке, в которой работает сайт (UTF-8 или windows-1251).
- Правки шаблона в
/bitrix/components/затрутся при обновлении. Копируйте шаблон в/local/templates/и правьте там. - Ссылки каталога ведут на 404:
SECTION_PAGE_URLне совпадает с адресами, заданными в инфоблоке. - Пункт не подсвечивается на страницах вне его папки: добавьте их в дополнительные ссылки.
Что делать дальше
Если сайт под git, добавьте в репозиторий и файлы .menu.php: правки из админки иначе остаются невидимыми для ревью. Затем замерьте время работы компонента меню на холодном кеше через панель отладки в публичной части. Если это заметная доля генерации страницы, увеличьте время кеша или уменьшите DEPTH_LEVEL. И сверьте параметры bitrix:menu и bitrix:menu.sections с документацией вашей версии.
Создатель презентаций: Структура и текст каждого слайда: заголовки-утверждения, одна мысль на слайд, заметки докладчику.
Спросить за 150 ₽Источники: Документация 1С-Битрикс: учебные курсы, Документация 1С-Битрикс: помощь пользователя
Частые вопросы
Где Битрикс хранит меню и можно ли править его из админки?
У меня другая версия или Битрикс24. Подойдёт ли это?
Я поправил файл меню, а на сайте ничего не изменилось. Что делать?
Какие подводные камни у меню на проде?
Можно ли собирать меню из инфоблока вместо файлов?
Почему пункт «Каталог» не подсвечивается на карточке товара?
Материал носит информационный характер и подготовлен редакцией «Агентуры». Он не является офертой, рекламой или индивидуальной консультацией. Упомянутые продукты, компании и торговые знаки принадлежат их правообладателям. Перед принятием решений, влекущих юридические или финансовые последствия, обратитесь к профильному специалисту.