Задача 1:
Нужно передать массив из значений ID раздела (отобранных по какому-то фильтру, в данном случае по коду бренда достаются товары этого бренда и их финальная секция IBLOCK_SECTION_ID) в GetNavChain, который достает путь по дереву от корня до раздела SECTION_ID (массив всех разделов), требуется разбить массив так, чтобы разделы не повторялись и выводились в зависимости от уровня вложенности раздела.
Массив без разделения:
[2030]
[156]
[554]
[2030]
[2036]
[179]
Решение:
Крутим GetNavChain и передаем ему из массива $arIdSect значение IBLOCK_SECTION_ID. Достаем весь массив GetNext. Проверяем и отбираем корневой раздел, смотрим на первый уровень DEPTH_LEVEL ==1. Остальные элементы так отбираем по уровням, и смотрим у кого какой родитель.
В итоге получается массив:
[SECTION]
[1]
[2030]
[2]
[2036]
[156]
[2036]
[3]
[156]
[554]
[2036]
[179]
// Вытащит всех родителей foreach ($arIdSect as $Sect): $res = CIBlockSection::GetNavChain($arParams['IBLOCK_ID'], $Sect, array()); while ($obj = $res->GetNext()) { if($obj['DEPTH_LEVEL'] == 1) $arResult['SECTION'][$obj['DEPTH_LEVEL']][$obj['ID']] = $obj; else $arResult['SECTION'][$obj['DEPTH_LEVEL']][$obj['IBLOCK_SECTION_ID']][$obj['ID']] = $obj; } endforeach;
Продолжение следует…