Вывод элементов с сохранением структуры разделов и подразделов
Уважаемые коллеги! Никак не получается вывести с сохранением структуры список элементов инфоблока. Кратко попробую описать задачу: каталог материалов. Структура примерно следующая: тип материала -класс цены материала --коллекция ---сам материал
Пример: Ткани -Standart --Kalipso ---007
Нужно на одной странице выводить табами тип материала, под ними класс цены материала и уже при выборе этих табов выводить списком коллекцию с материалами в ней, следующую коллекцию с материалами в ней и так далее. Пример: https://pode.eu/en-GB/bekleding-en-materialen
Табы и все прочее реализовать проблем нет, а вот структуру правильную собрать не получается. То есть вначале получить список разделов инфоблока, потом в каждом из них получить список подразделов, еще такая же итерация и уже потом получать список элементов в соответствующем подподразделе. При этом загонять в массивы список соответствующих секций. Использую компонент bitrix.news.list. Надеюсь на вашу помощь. Заранее спасибо!
P.S. Прошу не кидаться тапками, это мой первый вопрос)
Ответы (1 шт):
Лучше доработать комплексный компонент bitrix.news, он может вывести всю структуру.
Но если нужен именно код "сборки" структуры, то в документации есть пример:
//пример выборки дерева подразделов для раздела
$rsParentSection = CIBlockSection::GetByID(ID_необходимой_секции);
if ($arParentSection = $rsParentSection->GetNext())
{
$arFilter = array('IBLOCK_ID' => $arParentSection['IBLOCK_ID'],'>LEFT_MARGIN' => $arParentSection['LEFT_MARGIN'],'<RIGHT_MARGIN' => $arParentSection['RIGHT_MARGIN'],'>DEPTH_LEVEL' => $arParentSection['DEPTH_LEVEL']); // выберет потомков без учета активности
$rsSect = CIBlockSection::GetList(array('left_margin' => 'asc'),$arFilter);
while ($arSect = $rsSect->GetNext())
{
// получаем подразделы
}
}
А потом для нужных разделов выводить элементы с фильтром по IBLOCK_SECTION_ID:
$arSelect = Array("ID", "IBLOCK_ID", "IBLOCK_SECTION_ID", "PROPERTY_MATERIAL");
$arFilter = Array("IBLOCK_ID"=>IntVal($yvalue), "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y", "IBLOCK_SECTION_ID" => arSect['ID']);
$res = CIBlockElement::GetList(Array(), $arFilter, false, Array(), $arSelect);
while($ob = $res->GetNextElement()){
$arFields = $ob->GetFields();
//вывод элементов
}