В 1С-Битрикс каждый пункт меню может иметь условие показа — PHP-выражение, которое определяет, увидит ли посетитель этот пункт. Так удаётся спрятать служебные разделы от гостей и показать их только авторизованным или администраторам.
.menu.php раздела. Это четвёртый параметр массива пункта меню.Что такое условие показа пункта меню
Меню в 1С-Битрикс хранится в файлах вида .left.menu.php, .top.menu.php и т. п. Каждый пункт — это элемент массива $aMenuLinks, состоящий из нескольких значений.
Структура одного пункта:
- Название — текст ссылки;
- Ссылка — URL пункта;
- Массив дополнительных ссылок — для подсветки активности;
- Массив параметров — произвольные данные;
- Условие показа — PHP-выражение, возвращающее
trueилиfalse.
Если условие показа не задано или возвращает true, пункт отображается. Если возвращает false — пункт полностью исключается из меню ещё до вывода.
Где задать условие показа в админке
Проще всего редактировать условие через публичную часть в режиме правки:
- Включите режим Правка на административной панели вверху страницы.
- Наведите курсор на область меню и нажмите кнопку Меню → Изменить меню.
- Откройте нужный пункт на редактирование или добавьте новый.
- Разверните блок Дополнительно — там находится поле Условие показа.
- Впишите PHP-выражение (без открывающего тега
<?) и сохраните.
Альтернативный путь — редактирование файла меню напрямую: Контент → Структура сайта → Файлы и папки, найдите файл .menu.php нужного раздела и правьте пятый элемент массива пункта.
Показ пункта только авторизованным пользователям
Чаще всего требуется скрыть пункт от неавторизованных посетителей. Для этого используется объект пользователя $USER и его метод IsAuthorized().
Условие показа для авторизованных:
$GLOBALS['USER']->IsAuthorized()
И наоборот — показать пункт (например, «Войти») только гостям:
!$GLOBALS['USER']->IsAuthorized()
Важно: в условии показа используйте $GLOBALS['USER'], а не просто $USER — файл меню подключается внутри функции, и локальная переменная $USER там может быть недоступна.
Показ по группам пользователей
Если нужно показать пункт только определённой группе (например, менеджерам или партнёрам), проверяют членство пользователя в группе. Идентификаторы групп смотрите в Настройки → Пользователи → Группы пользователей.
Проверка по массиву групп текущего пользователя:
in_array(6, $GLOBALS['USER']->GetUserGroupArray())
Здесь 6 — ID нужной группы. Для нескольких групп удобнее пересечение массивов:
count(array_intersect(array(5,6), $GLOBALS['USER']->GetUserGroupArray())) > 0
Пункт покажется, если пользователь входит хотя бы в одну из групп 5 или 6.
Проверка на администратора
Группа с ID 1 — «Администраторы». Показать пункт только им:
$GLOBALS['USER']->IsAdmin()
Пример файла меню с условиями
Соберём несколько пунктов с разными условиями показа в одном файле меню:
$aMenuLinks = array(
array("Главная", "/", array(), array(), ""),— виден всем;array("Личный кабинет", "/personal/", array(), array(), "$GLOBALS['USER']->IsAuthorized()"),— только авторизованным;array("Войти", "/auth/", array(), array(), "!$GLOBALS['USER']->IsAuthorized()"),— только гостям;array("Отчёты", "/reports/", array(), array(), "in_array(6, $GLOBALS['USER']->GetUserGroupArray())"),— только группе 6.
);
Пятый элемент каждого массива — это и есть условие показа в виде строки с PHP-выражением. Пустая строка означает «показывать всегда».
Условие и права доступа на файлы
Условие показа скрывает пункт визуально, но не защищает саму страницу. Если пользователь знает прямой URL, он всё равно откроет его — если у него есть право на чтение файла.
Поэтому условие показа сочетают с настройкой прав доступа на раздел или файл:
- Откройте Контент → Структура сайта → Файлы и папки.
- Выделите нужный раздел и нажмите Доступ в контекстном меню.
- Установите уровень доступа для нужных групп (например, «Чтение» только для авторизованных).
Можно завязать условие показа прямо на право доступа к файлу, чтобы логика не расходилась:
$GLOBALS['APPLICATION']->GetFileAccessPermission("/reports/index.php") >= "R"
Метод вернёт уровень прав текущего пользователя на файл, и пункт покажется только при наличии доступа на чтение.
Частые ошибки
- Используют
$USERвместо$GLOBALS['USER']. Внутри функции вывода меню локальный$USERне определён, условие всегда даёт ошибку илиfalse. - Пишут условие с открывающим тегом
<?. В поле нужно только выражение — тег добавлять не надо. - Ставят присваивание вместо сравнения:
=вместо==. Это меняет значение переменной и ломает логику. - Забывают про кеширование меню. Если у компонента
bitrix:menuвключено кеширование, добавьте в параметры зависимостьCACHE_SELECTED_ITEMSи учитывайте группу пользователя в ключе кеша, иначе разные пользователи увидят один и тот же вариант. - Полагаются только на условие показа для защиты. Без прав доступа на файл страница остаётся доступной по прямой ссылке.
- Синтаксическая ошибка в выражении роняет весь вывод меню. Проверяйте условие на тестовом пункте перед публикацией.
Итог
Условие показа — это PHP-выражение в пятом элементе массива пункта меню, возвращающее true или false. С его помощью пункты скрывают от гостей, показывают отдельным группам или администраторам.
Ключевые правила: обращайтесь к пользователю через $GLOBALS['USER'], пишите только выражение без тега <?, дублируйте видимость реальными правами доступа на файлы и учитывайте кеширование компонента меню. Тогда навигация будет и удобной, и безопасной.