catalog.section.list для вывода дерева разделов и элементов

Зачастую у меня при разработке возникает двухуровневая структура данных, и часто удобно использовать в инфоблоках секции и элементы как способ хранения информации.
К сожалению битрикс не дает штатного компонента для вывода такого дерева:

  • секция 1
    — элемент1.1
    — элемент1.2
    — элемент1.3
  • секция 2
    — элемент2.1
    — элемент2.2
    — элемент2.3
    ...

Хотя для меня он был бы крайне полезен. В таких случаях для себя я использую следующий подход.
На страницу вытаскиваю стандартный компонент catalog.section.list с default-ом шаблоном.

  1. Вычищаю все лишнее с файлов template.php и result_modifier.php.
  2. В result_modifier делаю с помощью CIBlockElement::GetList запрос на получение всех элементов в данном инфоблоке и структурирую их в массив с ключом равным секции элемента.
  3. Прохожусь циклом по $arResult[«SECTIONS»] и добавляю в каждый элемент массива массив который я получил в шаге 2.
  4. В итоге у меня получается массив с секциями внутри каждого из элементов массива будет подмассив со всеми элементами массива.

Содержание файла 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. совершенно неточно что данный подход идеальный и вы можете придумать свой)

Поделиться
Отправить
Ваш комментарий
адрес не будет опубликован

ХТМЛ не работает

Ctrl + Enter
Популярное