Поднимем ветку 10-летней давности 
Может, кому пригодится.
Нарисовал простой алгоритм ("в лоб"), который из плоской структуры массива пунктов меню делает структуру многомерного массива, где подпункты меню вложены в элемент массива ["CHILD"] родительского пункта меню.
Поддерживает до 5 уровня вложенности (включительно). Кому нужно глубже - логику можно легко понять в скрипте.
Плоский массив формируется через вызов штатного компонента bitrix:menu.sections:
Дальше в result_modifier.php шаблона пишем (полностью готовый result_modifier.php):
В шаблоне уже получаем в $arResult следующей структуры:

Может, кому пригодится.
Нарисовал простой алгоритм ("в лоб"), который из плоской структуры массива пунктов меню делает структуру многомерного массива, где подпункты меню вложены в элемент массива ["CHILD"] родительского пункта меню.
Поддерживает до 5 уровня вложенности (включительно). Кому нужно глубже - логику можно легко понять в скрипте.
Плоский массив формируется через вызов штатного компонента bitrix:menu.sections:
| Код |
|---|
$APPLICATION->IncludeComponent("bitrix:menu.sections", "", array(
"IS_SEF" => "Y",
"SEF_BASE_URL" => "/catalog/",
"SECTION_PAGE_URL" => "#SECTION_CODE#/",
"DETAIL_PAGE_URL" => "#SECTION_CODE#/#ELEMENT_CODE#",
"IBLOCK_TYPE" => "catalog",
"IBLOCK_ID" => "1",
"DEPTH_LEVEL" => "5",
"CACHE_TYPE" => "A",
"CACHE_TIME" => "36000000"
),
false
); |
Дальше в result_modifier.php шаблона пишем (полностью готовый result_modifier.php):
| Код |
|---|
<?php if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die();
/** @var array $arParams */
/** @var array $arResult */
/** @global \CMain $APPLICATION */
/** @global \CUser $USER */
/** @global \CDatabase $DB */
/** @var CBitrixComponentTemplate $this */
$arNewMenu = array();
foreach ($arResult as $key => $arItem) {
if ($arItem["DEPTH_LEVEL"] == 1) {
$arNewMenu[] = $arItem;
}
elseif ($arItem["DEPTH_LEVEL"] == 2) {
$arNewMenu[count($arNewMenu) - 1]["CHILD"][] = $arItem;
}
elseif ($arItem["DEPTH_LEVEL"] == 3) {
$child2_count = count($arNewMenu[count($arNewMenu) - 1]["CHILD"]);
$arNewMenu[count($arNewMenu) - 1]["CHILD"][$child2_count-1]['CHILD'][] = $arItem;
}
elseif ($arItem["DEPTH_LEVEL"] == 4) {
$child2_count = count($arNewMenu[count($arNewMenu) - 1]["CHILD"]);
$child3_count = count($arNewMenu[count($arNewMenu) - 1]["CHILD"][$child2_count-1]['CHILD']);
$arNewMenu[count($arNewMenu) - 1]["CHILD"][$child2_count-1]['CHILD'][$child3_count-1]['CHILD'][] = $arItem;
}
elseif ($arItem["DEPTH_LEVEL"] == 5) {
$child2_count = count($arNewMenu[count($arNewMenu) - 1]["CHILD"]);
$child3_count = count($arNewMenu[count($arNewMenu) - 1]["CHILD"][$child2_count-1]['CHILD']);
$child4_count = count($arNewMenu[count($arNewMenu) - 1]["CHILD"][$child2_count-1]['CHILD'][$child3_count-1]['CHILD']);
$arNewMenu[count($arNewMenu) - 1]["CHILD"][$child2_count-1]['CHILD'][$child3_count-1]['CHILD'][$child4_count-1]['CHILD'][] = $arItem;
}
}
$arResult = $arNewMenu; |
В шаблоне уже получаем в $arResult следующей структуры:
Скрытый текст | ||
|---|---|---|
|