Поднимем ветку 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 следующей структуры:
Скрытый текст | ||
---|---|---|
|