Динамическое меню в 1С-Битрикс: настройка через .menu_ext.php

При разработке кастомного интернет-магазина на Битрикс: Управление сайтом, почти всегда необходимо меню, в котором пункты создаются динамически на основе создаваемых инфоблоков.

Во вновь созданном меню, в его настройках включаем галку «Подключать файлы с именами вида .тип_меню.menu_ext.php»:

Заходим в папку в разделе, в котором создали меню и находим файл меню, например это файл .catalog_test.menu.php.

Создаем в этой же директории доп. файл с именем .catalog_test.menu_ext.php.

В нем прописываем такой код:

<? 
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
global $APPLICATION;
$aMenuLinksExt=$APPLICATION->IncludeComponent("bitrix:menu.sections", "", array(
"IS_SEF" => "Y",
"SEF_BASE_URL" => "/catalog/",
"SECTION_PAGE_URL" => "#SECTION_CODE_PATH#/",
"DETAIL_PAGE_URL" => "#SECTION_CODE_PATH#/#ELEMENT_CODE#.php",
"IBLOCK_TYPE" => "catalog",
"IBLOCK_ID" => "4",
"DEPTH_LEVEL" => "3",
"CACHE_TYPE" => "A",
"CACHE_TIME" => "36000000"
),
false
);
$aMenuLinks = array_merge($aMenuLinksExt, $aMenuLinks);
?>

Где:

"SEF_BASE_URL" => "/catalog/" — каталог товаров инфоблока на сайте (ссылка на физическую страницу на сайте).
"IBLOCK_ID" — подставляем ID целевого инфоблока.
"DETAIL_PAGE_URL" => "#SECTION_CODE_PATH#/#ELEMENT_CODE#.PHP" — полный путь к элементу инфоблока.
"IBLOCK_TYPE" => "catalog" — ID типа инфоблока, из которого выводим данные:

"IBLOCK_ID" => "4" — ID конкретного инфоблока, из которого выводим пункты:

"DEPTH_LEVEL" => "3" — уровень вложенности. Этой цифрой можно ограничить вывод подразделов, если иерархия слишком глубокая.

Код компонента bitrix:menu для вывода на странице:

                <?$APPLICATION->IncludeComponent(
"bitrix:menu",
"vertical_multilevel",
Array(
"ALLOW_MULTI_SELECT" => "N",
"CHILD_MENU_TYPE" => "section_test",
"COMPOSITE_FRAME_MODE" => "A",
"COMPOSITE_FRAME_TYPE" => "AUTO",
"DELAY" => "N",
"MAX_LEVEL" => "2",
"MENU_CACHE_GET_VARS" => array(""),
"MENU_CACHE_TIME" => "3600",
"MENU_CACHE_TYPE" => "N",
"MENU_CACHE_USE_GROUPS" => "Y",
"ROOT_MENU_TYPE" => "catalog_test",
"USE_EXT" => "Y"
)
);?>
Поделись, если оказалось полезно :)
Tags:
Нет комментариев

Написать