catalog.section.list для вывода дерева разделов и элементов
Зачастую у меня при разработке возникает двухуровневая структура данных, и часто удобно использовать в инфоблоках секции и элементы как способ хранения информации.
К сожалению битрикс не дает штатного компонента для вывода такого дерева:
- секция 1
— элемент1.1
— элемент1.2
— элемент1.3 - секция 2
— элемент2.1
— элемент2.2
— элемент2.3
...
Хотя для меня он был бы крайне полезен. В таких случаях для себя я использую следующий подход.
На страницу вытаскиваю стандартный компонент catalog.section.list с default-ом шаблоном.
- Вычищаю все лишнее с файлов template.php и result_modifier.php.
- В result_modifier делаю с помощью CIBlockElement::GetList запрос на получение всех элементов в данном инфоблоке и структурирую их в массив с ключом равным секции элемента.
- Прохожусь циклом по $arResult[«SECTIONS»] и добавляю в каждый элемент массива массив который я получил в шаге 2.
- В итоге у меня получается массив с секциями внутри каждого из элементов массива будет подмассив со всеми элементами массива.
Содержание файла result_modifier будет примерно вот таким:
$arSelect = Array("ID", "NAME", "IBLOCK_SECTION_ID");
$arFilter = Array("IBLOCK_ID"=>$arParams["IBLOCK_ID"], "ACTIVE"=>"Y");
$res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
while($ob = $res->GetNextElement())
{
$arFields = $ob->GetFields();
$arSec[$arFields["IBLOCK_SECTION_ID"]][] = $arFields;
}
foreach ($arResult['SECTIONS'] as $key => $arSection){
$arResult['SECTIONS'][$key]["ELEMENTS"] = $arSec[$arSection["ID"]];
}
p.s. совершенно неточно что данный подход идеальный и вы можете придумать свой)