К статье
Практический материал

Разработка и Конфигурация · 8 мин

Как изменить меню в 1С-Битрикс

Как изменить меню в 1С-Битрикс: редактирование файлов .menu.php, типы меню, компонент bitrix:menu, шаблоны, права доступа и типичные ошибки.

Меню в 1С-Битрикс устроено иначе, чем в большинстве CMS: оно собирается из текстовых файлов .menu.php (и .menu_ext.php), лежащих в папках сайта, и выводится компонентом bitrix:menu. Поэтому «изменить меню» может означать три разные задачи: поменять пункты, изменить внешний вид или перестроить логику формирования. Подход к каждой задаче свой.

Простейший случай — добавить, переименовать или удалить пункт — решается прямо из публичной части сайта в режиме правки, без правок кода. Более сложные сценарии (выпадающие подменю из инфоблоков, многоуровневые меню, кастомный шаблон) требуют работы с файлами и параметрами компонента.

Перед любыми изменениями убедитесь, что у вас есть доступ к административной части и файловой структуре сайта, а также актуальная резервная копия. Ошибка в файле меню или шаблоне может «уронить» навигацию на всём сайте или в отдельном разделе.

Как устроено меню в Битриксе

В каждом разделе сайта могут лежать файлы вида .<тип>.menu.php, например .top.menu.php или .left.menu.php. Тип меню (top, left и т.д.) — это произвольное имя, которое связывает файл с конкретным вызовом компонента в шаблоне сайта. Внутри файла — обычный PHP-массив $aMenuLinks, где каждый пункт описывается названием, ссылкой, массивом дополнительных ссылок и параметрами.

Компонент bitrix:menu читает эти файлы, начиная с текущего раздела и поднимаясь вверх по иерархии (это управляется параметром ROOT_MENU_TYPE и уровнем вложенности MAX_LEVEL). Поэтому один и тот же пункт может редактироваться в разных местах в зависимости от того, к какому разделу он привязан.

Редактирование пунктов через режим правки

Самый безопасный способ — визуальный. Войдите на сайт под администратором, включите режим правки в панели управления и наведите курсор на область меню. Появится панель компонента с кнопкой «Изменить меню» или «Редактировать пункты меню».

В открывшемся окне можно добавить новый пункт (название и ссылка), изменить существующие, поменять порядок сортировки и удалить лишние. После сохранения Битрикс сам перезапишет соответствующий файл .menu.php. Этот способ исключает синтаксические ошибки в PHP и подходит контент-менеджерам без доступа к файлам.

Порядок действий в режиме правки
  1. 1
    Войдите на сайт под учётной записью администратора и включите режим правки
  2. 2
    Наведите курсор на область меню и нажмите иконку редактирования пунктов
  3. 3
    Добавьте, переименуйте или удалите пункты, задайте ссылки
  4. 4
    Сохраните изменения и проверьте меню в обычном режиме и на вложенных страницах

Редактирование файлов .menu.php вручную

Если нужен тонкий контроль — условия вывода, дополнительные параметры пунктов — файл редактируют напрямую. Откройте его через «Контент → Структура сайта → Файлы и папки» в админке или по FTP/SSH. Структура пункта выглядит так:

$aMenuLinks = Array(

Array(

"Каталог",

"/catalog/",

Array(),

Array(),

""

),

);

Четвёртый элемент массива — произвольные параметры (например, CSS-класс пункта), пятый — PHP-условие показа. Будьте внимательны с кавычками и запятыми: синтаксическая ошибка в этом файле приведёт к тому, что меню перестанет выводиться вовсе или страница покажет ошибку PHP.

Динамические подменю через .menu_ext.php

Когда пункты должны формироваться автоматически — например, подменю из разделов инфоблока каталога — используется файл .<тип>.menu_ext.php рядом с обычным файлом меню. В нём пишут PHP-код, который дополняет массив $aMenuLinks, чаще всего с помощью компонента bitrix:menu.sections.

Такой подход требует, чтобы в параметрах компонента меню был включён режим расширенной обработки (параметр USE_EXT = Y). Если файл создан, а пункты не появляются — первым делом проверьте именно этот параметр в настройках компонента в шаблоне сайта.

Изменение внешнего вида: шаблон компонента

За HTML и классы меню отвечает шаблон компонента bitrix:menu. Чтобы не потерять изменения при обновлении, шаблон копируют в папку шаблона сайта: /local/templates/ваш_шаблон/components/bitrix/menu/имя_шаблона/ и правят там файл template.php и стили.

Никогда не редактируйте шаблоны в папке /bitrix/components/ — обновление ядра перезапишет ваши правки. После изменения шаблона сбросьте кеш (в админке: «Настройки → Производительность» или кнопка сброса кеша в панели), иначе старый HTML продолжит выводиться.

Частые ошибки и проверка результата

Типичные ошибки
01
Правка файла меню не того типа: изменён .left.menu.php, а на странице выводится top — изменений не видно
02
Забытый сброс кеша: пункты обновлены, но посетители и вы видите старое меню
03
Относительные ссылки вместо абсолютных: пункт ведёт на несуществующий адрес во вложенных разделах
04
USE_EXT не включён: файл .menu_ext.php есть, но динамические подменю не появляются
05
Правка шаблона в /bitrix/components/: изменения стёрты очередным обновлением ядра

После любых изменений проверьте меню в трёх состояниях: на главной странице, в разделе второго уровня и в браузере без авторизации (или в режиме инкогнито). Права доступа тоже влияют на видимость: пункт на закрытый раздел для неавторизованного пользователя может не отображаться — это нормальное поведение, а не поломка.

Контрольные точки

Как проверить результат

Новый пункт в меню
Норма

Виден на всех страницах, где выводится данный тип меню, ссылка ведёт на нужный раздел

Тревожный признак

Пункт виден только в одном разделе или ведёт на 404

Подменю из инфоблока
Норма

Разделы каталога подтягиваются автоматически, новые разделы появляются после сброса кеша

Тревожный признак

Подменю пустое при заполненном инфоблоке — проверьте USE_EXT и тип меню

После сброса кеша
Норма

Меню одинаково выглядит в режиме правки и в инкогнито

Тревожный признак

В инкогнито старая версия — кеш не сброшен или включён композитный режим

FAQ

Добавил пункт в меню, но он не появился на сайте. Что делать?

Чаще всего виноват кеш: сбросьте его через панель управления или раздел «Производительность». Если не помогло — проверьте, тот ли тип меню вы редактировали (top/left), и нет ли в пункте условия, скрывающего его для вашей группы пользователей.

Как изменить порядок пунктов меню?

В режиме правки порядок меняется перетаскиванием или стрелками в окне редактирования. При ручной правке файла .menu.php порядок пунктов определяется порядком элементов в массиве $aMenuLinks — просто переместите нужный блок выше или ниже.

Можно ли сделать разные меню для разных разделов сайта?

Да. Положите файл .<тип>.menu.php с нужными пунктами в папку конкретного раздела — компонент при настройках по умолчанию подхватит меню ближайшего уровня. Дополнительно можно вызывать компонент с разными параметрами ROOT_MENU_TYPE в разных шаблонах или разделах.

Как скрыть пункт меню от неавторизованных пользователей?

Проще всего ограничить доступ к самому разделу в настройках прав — Битрикс автоматически скроет ссылку на недоступный раздел. Альтернатива — PHP-условие в пятом элементе массива пункта, например проверка $USER->IsAuthorized().

Меню сломалось после правки файла — выводится ошибка PHP. Как откатить?

Откройте файл .menu.php через админку или FTP и восстановите сохранённую копию. Если копии нет, проверьте синтаксис массива: каждая строка пункта должна заканчиваться запятой, кавычки — закрываться, скобки массивов — парно. После исправления сбросьте кеш.

Чем отличается .menu.php от .menu_ext.php?

Первый файл содержит статичный список пунктов и редактируется вручную или визуально. Второй — PHP-скрипт, который программно дополняет меню, например пунктами из инфоблока. Они работают вместе: сначала читается статический файл, затем выполняется расширяющий.

Итог

Что важно запомнить

Пункты меню меняются через режим правки или файлы .menu.php в папках разделов, внешний вид — через скопированный шаблон компонента bitrix:menu, динамические подменю — через .menu_ext.php при включённом USE_EXT. После любых правок сбрасывайте кеш и проверяйте меню в режиме инкогнито.