Меню
- Статическое меню
- Динамическое меню
- Смешанное меню
- Типы меню
- Структура меню
- Файлы меню
- Управление меню в интерфейсе
- Компоненты
- Шаблоны меню
- Права доступа
- Примеры создания меню
- Примеры настроек меню
- Подсветить ссылки
- Открыть пункт меню в новом окне
- Показать пункт для неавторизованных пользователей
- Показать пункт меню в разделе сайта
- Показать пункт меню на главной странице и в одном разделе
- Добавить подсказку для пунктов меню
- Добавить изображения рядом с пунктами меню
- Разные изображения для языков сайта
- Отдельное меню для разделов сайта
- Меню tree в постоянно открытом состоянии
- Меню tree, которое не сворачивается при переходе
- Скрыть боковое меню по свойству страницы
- Кеш меню
- Ошибки и советы
В Bitrix Framework меню может быть статическим, динамическим или смешанным. Выбор меню зависит от частоты изменений структуры сайта и вида информации.
Статическое меню
В статическое меню пункты добавляют вручную. Каждый пункт связан с конкретной страницей или разделом. Такое меню используют, когда структура сайта меняется редко.

При добавлении или удалении страниц статическое меню нужно обновлять вручную. Если меню не помещается на странице, измените шаблон сайта.
Динамическое меню
Динамическое меню формируется на основе данных из информационных блоков. Система автоматически обновляет меню при добавлении новых разделов и элементов в инфоблок. Например, в инфоблок добавили раздел «Домашняя одежда», в меню сразу появился новый пункт. Динамическое меню применяют, когда структура сайта меняется часто.

Смешанное меню
Смешанное меню используют, когда нужно объединить разные виды информации. Часть пунктов формируется из инфоблока, часть добавляют вручную. Например, меню может состоять:
-
из перечня услуг компании — это динамическое меню,
-
ссылок на страницы с контактной информацией — это статическое меню.
Типы меню
На сайте могут быть разные типы меню. Тип — это идентификатор меню. По нему система определяет, какое меню отображать. Тип не связан с расположением на странице. Один и тот же тип можно использовать в любом месте.
В демонстрационном интернет-магазине из дистрибутива 1С-Битрикс: Управление сайтом есть три типа:
-
top— верхнее, -
left— левое, -
bottom— нижнее.
Можно добавлять свои типы: footer, mobile и другие.
Как задать тип меню
-
В административном разделе откройте страницу Настройки > Настройки продукта > Настройки модулей > Управление структурой.
-
В секции Настройки для сайтов выберите сайт, для которого нужно задать тип меню.
-
Укажите параметры.
-
Тип — задайте на латинице, например,
mymenu, -
Название — Мое меню.
-

Структура меню
Меню в Bitrix Framework состоит из двух основных частей.
-
Файлов меню с информацией о пунктах:
.тип.menu.phpи.тип.menu_ext.php. Префикстип— это тип меню, например,top,left. -
Шаблона, который определяет внешний вид меню. Шаблон хранится в папке
/templates/компонента меню или в файлетип.menu_template.php.
Файлы меню
Файл размещают в разделе, на страницах которого нужно показать меню. Если в разделе нет своего файла, система выведет меню из раздела выше.
Подробнее о поиске файла меню читайте в разделе Наследование меню.
Файл статического меню
Пункты статического меню описывают в файле .тип.menu.php. В нем можно использовать стандартные переменные.
-
$aMenuLinks— массив с данными о каждом пункте меню. Массивом можно управлять через административный интерфейс. -
$sMenuTemplate— абсолютный путь к файлу с шаблоном менютип.menu_template.php. Переменная используется редко, если шаблон нужно подключить через API, а не компонент.
Пример файла .тип.menu.php
<?
$aMenuLinks = Array(
Array(
"Новости",
"news/",
Array(),
Array(),
""
),
Array(
"Как купить",
"about/howto/",
Array(),
Array(),
""
),
Array(
"Доставка",
"about/delivery/",
Array(),
Array(),
""
),
Array(
"О магазине",
"about/",
Array(),
Array(),
""
),
Array(
"Гарантия",
"about/guaranty/",
Array(),
Array(),
""
),
Array(
"Контакты",
"about/contacts/",
Array(),
Array(),
""
),
Array(
"Книги",
"/books/",
Array(),
Array(),
""
)
);
?>
Файл динамического меню
Файл .тип.menu_ext.php содержит PHP-код, который расширяет массив $aMenuLinks на основе данных из информационных блоков или других источников. Например, в файле .тип.menu_ext.php используют компонент bitrix:menu.sections, чтобы получить названия разделов информационного блока.
Пример файла .тип.menu_ext.php
<?
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
global $APPLICATION;
// Подготовим массив для дополнительных пунктов меню
$aMenuLinksExt = array();
if(CModule::IncludeModule('iblock'))
{
// Фильтр для выборки инфоблоков типа catalog и привязанных к текущему сайту
$arFilter = array(
"TYPE" => "catalog",
"SITE_ID" => SITE_ID,
);
// Получаем список инфоблоков, сортируем по полю SORT, затем по ID
$dbIBlock = CIBlock::GetList(array('SORT' => 'ASC', 'ID' => 'ASC'), $arFilter);
$dbIBlock = new CIBlockResult($dbIBlock);
if ($arIBlock = $dbIBlock->GetNext())
{
if(defined("BX_COMP_MANAGED_CACHE"))
$GLOBALS["CACHE_MANAGER"]->RegisterTag("iblock_id_".$arIBlock["ID"]);
// Если инфоблок активен, подключаем компонент для генерации меню из его разделов
if($arIBlock["ACTIVE"] == "Y")
{
// Подключаем компонент menu.sections
$aMenuLinksExt = $APPLICATION->IncludeComponent("bitrix:menu.sections", "bootstrap_v4", array(
"IS_SEF" => "Y",
"SEF_BASE_URL" => "",
"SECTION_PAGE_URL" => $arIBlock['SECTION_PAGE_URL'],
"DETAIL_PAGE_URL" => $arIBlock['DETAIL_PAGE_URL'],
"IBLOCK_TYPE" => $arIBlock['IBLOCK_TYPE_ID'],
"IBLOCK_ID" => $arIBlock['ID'],
"DEPTH_LEVEL" => "3",
"CACHE_TYPE" => "N",
), false, Array('HIDE_ICONS' => 'Y'));
}
}
if(defined("BX_COMP_MANAGED_CACHE"))
$GLOBALS["CACHE_MANAGER"]->RegisterTag("iblock_id_new");
}
// Объединяем основное меню с динамическими пунктами
$aMenuLinks = array_merge($aMenuLinks, $aMenuLinksExt);
?>
Массив $aMenuLinks
Массив $aMenuLinks хранит пункты меню. Каждый пункт — это массив с пятью элементами.
-
Название пункта.
-
Ссылка на пункт.
-
Массив дополнительных ссылок, которые влияют на подсветку пункта.
-
Массив дополнительных параметров для шаблона.
-
Условие отображения — PHP-выражение, которое должно вернуть
true.
<?
$aMenuLinks = Array(
Array(
"Новости",
"news/",
Array(),
Array(),
"CSite::InDir('/index.php')"
),
Array(
"Как купить",
"about/howto/",
Array(),
Array(),
""
),
Array(
"Доставка",
"about/delivery/",
Array(),
Array(),
"CSite::InDir('/personal/')"
),
Array(
"Гарантия",
"about/guaranty/",
Array(),
Array(),
"CSite::InGroup(array(1,6))"
),
);
?>
Наследование меню
В Bitrix Framework меню наследуемое. Если в разделе нет своего меню, отобразится меню из вышестоящего раздела.
Например, на главной странице сайта есть меню. Оно автоматически отображается во всех подразделах сайта: /news/, /about/, /services/. Если в /about/ добавить свое меню, оно заменит наследуемое меню с главной страницы.
Как работает замена меню
-
Статическое меню заменяет статическое.
-
Динамическое меню заменяет только другое динамическое.
-
Пустой файл
.тип.menu.phpпереопределяет меню как пустое. Это приводит к отсутствию меню в разделе.
Как работает поиск файла меню
Система ищет файл меню в следующем порядке:
-
в текущем разделе, например,
/about/delivery/, -
родительском разделе
/about/, -
главном разделе сайта.
Поиск останавливается при первом найденном файле, независимо от содержимого.
Управление меню в интерфейсе
Статическое меню можно создавать и редактировать через интерфейс системы.
Как создать меню
-
В административном разделе сайта откройте Контент > Структура сайта > Файлы и папки.
-
Перейдите в нужную папку.
-
Нажмите Добавить > Добавить меню.
-
Выберите тип меню, например,
[bottom] Нижнее меню. -
Укажите названия и ссылки пунктов меню.

Система создаст файл .bottom.menu.php. В структуре сайта он отобразится как Меню типа «bottom».

Как отредактировать меню
Открыть меню для редактирования пунктов можно двумя способами.
-
Через административный раздел. В менеджере файлов откройте раздел с меню и нажмите Редактировать меню.

-
Через публичный раздел. На административной панели нажмите Меню > Редактировать… и выберите тип меню.

Режимы редактирования
В системе доступно два режима редактирования меню. Изменить режим можно на странице редактирования меню с помощью кнопки-переключателя Упрощенный режим или Расширенный режим.

Упрощенный режим
Режим позволяет выполнить базовые настройки меню:
-
выбрать тип меню,
-
указать название пункта,
-
задать ссылку для перехода,
-
установить порядок отображения.

Расширенный режим
Расширенный режим содержит настройки упрощенного режима и имеет детальные настройки.
-
Тип меню — выберите тип меню.
-
Шаблон для меню — укажите путь к файлу
тип.menu_template.phpс шаблоном внешнего вида. -
Название — введите текст, который отображается в меню в публичной части.
-
Ссылка — задайте адрес раздела или страницы, на которую ведет пункт.
-
Сортировка — введите число, которое определяет порядок отображения пунктов.
-
Доп. ссылки для подсветки — укажите список разделов и страниц, при переходе по которым будет подсвечен этот пункт меню.
-
Тип условия — укажите тип условия, при выполнении которого пункт меню будет показан посетителям.
-
Условие — задайте правило, по которому пункт отображается. Например, только пользователям с правами администратора.
-
Параметры — укажите дополнительные настройки, которые можно использовать в шаблоне меню.

Дополнительные параметры передаются в шаблон с помощью массива $PARAMS в виде пар имя => значение. Например:
if ($PARAMS["SEPARATOR"]=="Y") {
// выводим разделитель
}
Количество дополнительных параметров в форме можно увеличить.
-
В административном разделе откройте страницу Настройки > Настройки продукта > Настройки модулей > Управление структурой.
-
В параметре Количество дополнительных параметров меню укажите нужное число.

Компоненты
Чтобы отобразить меню на сайте, нужно подключить компоненты Меню bitrix:menu и Пункты меню bitrix:menu.sections.
О том, как подключить компоненты, читайте в статье Компоненты.
Меню bitrix:menu
Компонент Меню bitrix:menu можно разместить в шаблоне сайта или во включаемой области. Компонент получает данные для пунктов из файлов:
-
.тип.menu.php— для статического меню, -
.тип.menu_ext.php— для динамического меню.
В настройках компонента указывают уровень вложенности и тип меню для первого и последующих уровней.

Стандартные шаблоны компонента bitrix:menu поддерживают до четырех уровней вложенности. Чтобы создать меню с большим количеством уровней, скопируйте и отредактируйте компонент.
Чтобы вывести пункты динамического меню, в настройках компонента отметьте опцию Подключать файлы с именами вида .тип_меню.menu_ext.php.
Если в меню используются разделы каталога без ЧПУ, необходимо указать переменные в параметре Значимые переменные запроса.
Пункты меню bitrix:menu.sections
Компонент Пункты меню bitrix:menu.sections подключают к инфоблоку и используют для динамических меню. Компонент генерирует пункты автоматически.
Вызов компонента можно разместить в файле .тип.menu_ext.php.
Шаблоны меню
Шаблон меню — это шаблон компонента bitrix:menu. Системные шаблоны расположены в папке /bitrix/components/bitrix/menu/templates.
Вы можете:
-
выбрать готовый шаблон в настройках компонента,
-
создать свой вариант,
-
скопировать и отредактировать существующий шаблон.
Подробно о работе с шаблонами компонента читайте в статье Компоненты.
Примеры системных шаблонов
-
.default— вертикальный шаблон. Подходит для главного меню. Все уровни вложенности отображаются на одном уровне. -
tree— древовидный вертикальный шаблон. Передает структуру сайта. -
vertical_multilevel— вертикальное выпадающее меню. Подменю появляется при наведении. Подходит для глубоких разделов. -
grey_tabs,blue_tabs— горизонтальные шаблоны. Серое и голубое меню в виде вкладок. -
horizontal_multilevel— горизонтальное выпадающее меню. Подменю раскрывается вниз.
Как создать шаблон меню
-
Определите структуру HTML — решите, будет ли меню списком, таблицей или блоками.
-
Создайте файл
template.php— используйте массив$arResultкомпонентаbitrix:menu. -
Добавьте CSS-файлы — сделайте активные пункты заметными, настройте поведение при наведении.
Структура шаблона меню
Каждый шаблон состоит из трех частей.
-
Пролог — проверка доступа.
-
Тело — цикл по пунктам меню.
-
Эпилог — закрытие тегов.
Пример шаблона .default:
<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
<?if (!empty($arResult)):?>
<ul class="left-menu">
<?
foreach($arResult as $arItem):
if($arParams["MAX_LEVEL"] == 1 && $arItem["DEPTH_LEVEL"] > 1)
continue;
?>
<?if($arItem["SELECTED"]):?>
<li><a href="<?=$arItem["LINK"]?>" class="selected"><?=$arItem["TEXT"]?></a></li>
<?else:?>
<li><a href="<?=$arItem["LINK"]?>"><?=$arItem["TEXT"]?></a></li>
<?endif?>
<?endforeach?>
</ul>
<?endif?>
Как работает массив $arResult
Компонент bitrix:menu преобразует массив $aMenuLinks в $arResult. Каждый пункт меню — это массив с параметрами.
-
TEXT— название пункта. -
LINK— ссылка. -
SELECTED— принимаетtrue, если пользователь на этой странице, иначе —false. -
PERMISSION— уровень доступа на страницу по ссылке. Возможные значения:-
D— доступ запрещен, -
R— чтение, -
U— документооборот, -
W— запись, -
X— полный доступ.
-
-
ITEM_TYPE— тип ссылки:D— раздел,P— страница,U— страница с параметрами. -
ITEM_INDEX— порядковый номер пункта. -
PARAMS— дополнительные параметры.
Стили шаблона
Для текстового меню можно указать цвета обычных и активных пунктов, стили для подменю или подразделов. CSS-стили задают в файле style.css. Файл размещают в папке шаблона меню.
Чтобы выделить заголовки разделов, можно использовать графические или текстовые элементы. Например, добавить иконки или изменить стиль текста.
Права доступа
Проверка прав доступа влияет на отображение меню и его элементов.
Показ пунктов
В расширенном режиме редактирования меню можно задать условия видимости.
-
Тип условия —
Для групп пользователей, -
Условие — выберите нужную группу, например,
Администраторы.

Шаблон меню
Права доступа могут влиять на внешний вид меню. В шаблоне можно скрывать элементы, менять стили или добавлять изображения в зависимости от пользователя.
<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
<?if (!empty($arResult)):?>
<!— Если есть пункты меню, выводим блок —>
<div class="blue-tabs-menu">
<ul>
<?foreach($arResult as $arItem):?>
<?if ($arItem["PERMISSION"] > "D"):?>
<!— Показываем пункты, к которым у пользователя есть доступ —>
<li><a href="<?=$arItem["LINK"]?>"><nobr><?=$arItem["TEXT"]?></nobr></a></li>
<?endif?>
<?endforeach?>
</ul>
</div>
<div class="menu-clear-left"></div>
<?endif?>
Проверка значения $arItem["PERMISSION"] используется только для меню сайта. Она не применяется к другим компонентам или частям системы.
Примеры создания меню
Примеры составлены на основе демонстрационного интернет-магазина и меню в нижней его части.

Предварительные операции
-
В корне сайта создайте раздел
test-menu. -
Отметьте опцию добавить пункт меню.

-
Укажите имя пункта и выберите тип
Левое меню.
Система создаст раздел и добавит пункт в Левое меню.

Древовидное меню
Древовидное меню можно настроить с разным количеством уровней.
Двухуровневое древовидное меню
-
В настройках модуля Управление структурой добавьте новый тип меню —
submenuПодменю. -
В нижней области раздела
test-menuоткройте параметры компонента Менюbitrix:menu -
В параметрах укажите следующие значения:
-
Шаблон компонента —
tree, -
Тип меню для первого уровня —
Левое меню, -
Уровень вложенности меню —
2, -
Тип меню для остальных уровней —
Подменю.
-
-
В разделе
test_menuсоздайте две страницыnew-page-1.phpиnew-page-2.php. В форме создания отметьте опцию Добавить пункт меню и укажите типПодменю.
В результате появится дерево с двумя уровнями.

Файл .submenu.menu.php содержит массив из двух пунктов.
<?
$aMenuLinks = Array(
Array(
"Новая страница 1",
"/test-menu/new-page-1.php",
Array(),
Array(),
""
),
Array(
"Новая страница 2",
"/test-menu/new-page-2.php",
Array(),
Array(),
""
)
);
?>
Многоуровневое древовидное меню
Создайте статическое четырехуровневое меню на основе двухуровневого меню с шаблоном tree.
-
В административном разделе откройте страницу Контент > Структура сайта > Файлы и папки > test-menu.
-
В разделе
test-menuсоздайте папкуtest-1и добавьте ее в меню типа[submenu] Подменю. Дополнительно можно создать индексную страницу раздела.
-
Внутри
test-1создайте папкуtest-2и добавьте ее в меню типа[submenu] Подменю.
-
Файл с меню будет создан автоматически в
test-1вместе с папкойtest-2. Это происходит за счет того, что для папкиtest-2была отмечена опция Создать пункт меню.
-
В папке
test-2создайте меню типа[submenu] Подменюи добавьте пункт со ссылкой, например, на индексную страницу.Если в последнем разделе иерархии не создать меню, он будет отображен как страница, а не папка.

В результате меню будет отображено как дерево из четырех уровней.

При удалении разделов и страниц необходимо отредактировать меню вручную.
Выпадающее меню
Выпадающее меню показывает подпункты при наведении. Правила создания аналогичны древовидному меню.
-
Убедитесь, что в системе создано два типа меню. Например,
leftиsubmenu. Первый тип — основное меню раздела, второй тип — источник для выпадающего меню. -
В компоненте Меню
bitrix:menuвыберите один из шаблонов:catalog_vertical,catalog_horizontal,horizontal_multilevel,vertical_multilevelилиbootstrap_v4. -
Настройте параметры компонента:
-
Тип меню для первого уровня — выберите в списке
left, -
Тип меню для остальных уровней — укажите
submenu. -
Уровень вложенности меню — укажите подходящее значение от одного до четырех.
-
-
В каждом статическом подразделе создайте меню типа
submenu. -
Ссылки на подразделы должны вести на папку, а не на страницу
index.php. -
В меню можно комбинировать статические и динамические пункты.

Выпадающее меню из разделов инфоблока
Для разделов инфоблока можно создать динамическое меню и добавить его к выпадающему меню. Получится смешанное меню.
-
В административном разделе сайта перейдите на страницу Контент > Инфоблоки > Типы инфоблоков > Каталоги.
-
Создайте информационный блок, например, Книги.

-
Добавьте несколько разделов и элементов. Например, разделы Научная литература и Фантастика. Внутри создайте подразделы.

-
Откройте страницу Контент > Структура сайта > Файлы и папки > test-menu.
-
В разделе
test-menuсоздайте файл.submenu.menu_ext.php. Имя типаsubmenuдолжно совпадать с типом меню в разделе.
-
Разместите компонент Пункты меню
bitrix:menu.sections. -
Настройте параметры компонента.
-
Тип информационного блока — выберите
Каталоги. -
Код информационного блока —
Книги. -
URL, ведущий на страницу с содержимым раздела — например,
/books/#SECTION_ID#/. -
Сколько уровней вложенности выводить — укажите число, которое больше
1. Например,2.
-
-
Откройте на редактирование файл
.submenu.menu_ext.phpв режиме PHP. -
Допишите проверку включения кода из ядра:
<? if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die(); global $APPLICATION; $aMenuLinksExt = $APPLICATION->IncludeComponent(… -
После вызова компонента допишите код подключения к меню:
$aMenuLinks = array_merge($aMenuLinks, $aMenuLinksExt);В результате код в файле должен быть следующим:
<? if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die(); global $APPLICATION; $aMenuLinksExt = $APPLICATION->IncludeComponent( "bitrix:menu.sections", "", Array( "CACHE_TIME" => "36000000", "CACHE_TYPE" => "A", "DEPTH_LEVEL" => "2", "DETAIL_PAGE_URL" => "#SECTION_ID#/#ELEMENT_ID#", "IBLOCK_ID" => "4", "IBLOCK_TYPE" => "catalog", "ID" => $_REQUEST["ID"], "IS_SEF" => "N", "SECTION_PAGE_URL" => "#SECTION_ID#/", "SECTION_URL" => "/books/#SECTION_ID#/", "SEF_BASE_URL" => "/books/" ) ); $aMenuLinks = array_merge($aMenuLinks, $aMenuLinksExt); ?> -
В публичной части сайта откройте раздел
test-menu. -
В нижней части раздела откройте параметры компонента Меню
bitrix:menu.
-
Отметьте опцию Подключать файлы с именами вида .тип_меню.menu_ext.php.

В результате меню отображает разделы инфоблока.
-
Массив
$aMenuLinksвозвращает пунктыПодменю. -
Массив
$aMenuLinksExtсодержит результат работы компонентаbitrix:menu.sections.

Графическое меню
Можно создать меню, где каждый пункт — это изображение. Активный пункт будет отображаться с одной картинкой, неактивный — с другой. Если изображение не задано, будет использоваться изображение по умолчанию.
-
Подготовьте три изображения.
-
Одно изображение по умолчанию на случай, если изображение для пункта не задано.
-
По два изображения на каждый пункт: для активного и неактивного состояния.
В примере будут использованы схематичные изображения.

-
-
В административном разделе откройте страницу Контент > Структура сайта > Файлы и папки > images.
-
Создайте папку
menuи загрузите в нее картинки.
-
Перейдите на страницу Контент > Структура сайта > Файлы и папки > test-menu.
-
Откройте на редактирование меню типа
submenuв расширенном режиме. -
Для пунктов меню добавьте параметры:
-
ACT— укажите в значении путь к изображению активного состояния/images/menu/active.png. -
NOACT— укажите в значении путь/images/menu/noactive.png.
Для одного из пунктов не добавляйте параметры, чтобы проверить работу кода.

-
-
В публичной части сайта откройте раздел
test-menu. -
В нижней части раздела откройте параметры компонента Меню
bitrix:menu. -
Измените шаблон компонента на
.default. -
Скопируйте шаблон компонента и откройте его на редактирование.

-
В шаблоне найдите следующий участок кода:
<?if($arItem["SELECTED"]):?> <li><a href="<?=$arItem["LINK"]?>" class="selected"><?=$arItem["TEXT"]?></a></li> <?else:?> <li><a href="<?=$arItem["LINK"]?>"><?=$arItem["TEXT"]?></a></li> <?endif?> -
Замените его на код:
<?if($arItem["SELECTED"]):?> <li> <a href="<?=$arItem["LINK"]?>"> <img src="<?=(array_key_exists("ACT", $arItem["PARAMS"]) && file_exists($_SERVER["DOCUMENT_ROOT"].$arItem["PARAMS"]["ACT"]) ? $arItem["PARAMS"]["ACT"] : "/images/menu/default.png")?>" /> </a> </li> <?else:?> <li> <a href="<?=$arItem["LINK"]?>"> <img src="<?=(array_key_exists("NOACT", $arItem["PARAMS"]) && file_exists($_SERVER["DOCUMENT_ROOT"].$arItem["PARAMS"]["NOACT"]) ? $arItem["PARAMS"]["NOACT"] : "/images/menu/default.png")?>" /> </a> </li> <?endif?> -
Сохраните шаблон.
В результате пункты меню отображаются как изображения, с разными картинками для активного и неактивного состояния.

Примеры настроек меню
В Bitrix Framework меню можно настроить подсветку, добавить подсказки и изображения, указать права доступа.
Подсветить ссылки
-
В расширенном режиме редактирования меню заполните поле Доп. ссылки для подсветки.
-
Укажите путь к странице относительно корня сайта, например:
/about/mypage.php. -
При переходе на эту страницу пункт меню подсветится.
Открыть пункт меню в новом окне
-
В расширенном режиме редактирования меню добавьте параметр:
Название: target Значение: target="_blank" -
В шаблоне меню замените
<a href="<?=$arItem["LINK"]?>"><?=$arItem["TEXT"]?></a>на строку
<a href="<?=$arItem["LINK"]?>" <?=$arItem["PARAMS"]["target"]?>><?=$arItem["TEXT"]?></a>
Показать пункт для неавторизованных пользователей
В расширенном режиме редактирования настройте условие.
-
Тип условия —
Выражение PHP. -
Условие —
!$USER->IsAuthorized().
Показать пункт меню в разделе сайта
В расширенном режиме редактирования настройте условие.
-
Тип условия —
Для папки и файла. -
Условие — задайте путь к разделу.
Работает для статических страниц или страниц с ЧПУ. Для динамических URL необходимо использовать условие Параметр в URL.
Показать пункт меню на главной странице и в одном разделе
В расширенном режиме редактирования настройте условие.
-
Тип условия —
Выражение PHP. -
Условие —
CSite::InDir('/index.php') or CSite::InDir('about/'), гдеabout/— это пример раздела.
Добавить подсказку для пунктов меню
-
В расширенном режиме редактирования меню добавьте параметр:
Название: A_TITLE Значение: текст подсказки -
В шаблоне меню
<?if($arItem["SELECTED"]):?> <li><a href="<?=$arItem["LINK"]?>" class="selected"><?=$arItem["TEXT"]?></a></li> <?else:?> <li><a href="<?=$arItem["LINK"]?>"><?=$arItem["TEXT"]?></a></li> <?endif?>замените первую ссылку в коде на строку
<a href="<?=$arItem["LINK"]?>" class="selected" title="<?=$arItem["PARAMS"]["A_TITLE"]?>"><?=$arItem["TEXT"]?></a> -
Вторую строку замените на следующую строку
<a href="<?=$arItem["LINK"]?>" title="<?=$arItem["PARAMS"]["A_TITLE"]?>"><?=$arItem["TEXT"]?></a>
Добавить изображения рядом с пунктами меню
-
В расширенном режиме редактирования меню добавьте параметр:
Название: IMG Значение: путь к изображению -
В шаблоне меню после строки
<a href="<?=$arItem["LINK"]?>">добавьте строку с изображением
<img src="<?=$arItem["PARAMS"]["IMG"]?>" border="0" />
Разные изображения для языков сайта
-
Если сайт двуязычный, в шаблоне меню добавьте класс языка.
<body class="lang-<?=LANG?>"> -
В CSS-файле укажите правила для смены изображений по языку.
.menu li.item1 { background-image: url(title-en.gif); } .lang-ru .menu li.item1 { background-image: url(title-ru.gif); }
Отдельное меню для разделов сайта
Чтобы меню главной страницы и разделов сайтов отличались, настройте смену шаблонов.
-
В административном разделе откройте страницу Настройки > Настройки продукта > Сайты > Список сайтов.
-
В настройках сайта в секции Шаблон выберите нужный шаблон и задайте условие «для папки или файла».
Если шаблон сайта простой, можно добавить в код проверку с помощью строк:
if($APPLICATION->GetCurPage() == "/index.php") {
// вывод меню для главной страницы
} else {
// вывод другого меню
}
Меню tree в постоянно открытом состоянии
-
Скопируйте стандартный шаблон меню tree в шаблон сайта.
-
В файле
template.phpзамените<li class="close">на<li>.
Развернутые пункты будут сворачиваться при клике на изображение.
Меню tree, которое не сворачивается при переходе
Если уровень вложенности меню меньше двух, выполните следующие действия:
-
Скопируйте стандартный шаблон меню tree в шаблон сайта.
-
В файле
template.phpзамените<li class="close">на<li <?if (!$arItem["SELECTED"]):?>class="close"<?endif?>>.
Для более глубокой вложенности добавьте следующий код в шаблон:
<?if (!empty($arResult)):?>
<?
// Определяем, какие пункты меню должны быть открыты для дерева
$lastLevel = 0;
$selected = false;
// Проходим по меню в обратном порядке, чтобы найти выбранный пункт и подсветить его родителей
foreach(array_reverse($arResult) as $arItem){
if ($arItem["SELECTED"]) {
$lastLevel = $arItem["DEPTH_LEVEL"]; // Запоминаем уровень выбранного пункта
$selected = true;
}
// Если уже нашли выбранный пункт и поднимаемся выше по дереву
if ($selected and $arItem["DEPTH_LEVEL"] < $lastLevel){
$arResult[ $arItem["ITEM_INDEX"] ]["SELECTED"] = true; // Подсвечиваем родителя
$lastLevel—; // Переходим на уровень выше
}
}
?>
<div class="menu-sitemap-tree">
<ul>
<?$previousLevel = 0;foreach($arResult as $arItem):?>
Скрыть боковое меню по свойству страницы
-
В верхнюю часть шаблона
header.phpдобавьте код:$APPLICATION->ShowProperty('menu'); -
Если для страницы нужно скрыть меню, в ее свойствах укажите:
$APPLICATION->SetPageProperty('hide_menu', 'Y'); -
В нижнюю часть сайта
footer.phpдобавьте код:if( 'Y' != $APPLICATION->GetPageProperty('hide_menu') ){ ob_start(); echo 'проверка отложенного меню!'; // здесь выводим меню компонентом или другим способом $APPLICATION->SetPageProperty('menu', ob_get_clean() ); }
Меню выводится в футере, если свойство hide_menu не равно Y. Если оно установлено, то меню не отображается.
Кеш меню
Кеш меню зависит от адреса страницы. Если страниц много, размер кеша будет большим. В этом случае рекомендуется отключить кеш в компоненте меню.
-
Включите на сайте режим правки и откройте параметры компонента.
-
В параметре Тип кеширования выберите Не кешировать.

Ошибки и советы
| Ошибка | Совет |
|---|---|
| Меню не обновилось после изменений | Очистите кеш или отключите его временно |
| Пункт не отображается | Проверьте условие отображения и права доступа |
| Появилось лишнее меню | Удалите или переименуйте файл .тип.menu.phpв подразделе |
| Динамическое меню не работает | Убедитесь, что создали файл .тип.menu_ext.php и в параметрах компонента bitrix:menu отметили опцию Подключать файлы с именами вида .тип_меню.menu_ext.php |