Для получения разделов, в которых есть активные товары, вам потребуется использовать API 1C-Bitrix и выполнить следующие шаги:
1. Создайте объект типа CIBlockSection и получите список всех разделов вашего инфоблока. Для этого используйте метод GetList со следующими параметрами:
$arFilter = array( "IBLOCK_ID" => ваш_идентификатор_инфоблока, "ACTIVE" => "Y" // только активные разделы ); $arSelect = array( "ID", "NAME" ); $rsSections = CIBlockSection::GetList(array(), $arFilter, false, $arSelect);
2. Для каждого раздела проверьте, есть ли в нем активные товары. Для этого используйте метод CIBlockElement::GetList со следующими параметрами:
$arFilter = array( "IBLOCK_ID" => ваш_идентификатор_инфоблока, "SECTION_ID" => $раздел["ID"], // ID текущего раздела "ACTIVE" => "Y" // только активные элементы ); $arSelect = array( "ID" ); $rsElements = CIBlockElement::GetList(array(), $arFilter, false, false, $arSelect); $isActiveElementsExist = false; while ($element = $rsElements->Fetch()) { $isActiveElementsExist = true; break; }
3. Если имеются активные элементы в текущем разделе, добавьте его в список разделов с активными товарами. Для этого создайте отдельный массив и добавьте в него информацию о разделе:
if ($isActiveElementsExist) { $sectionsWithActiveElements[] = array( "ID" => $раздел["ID"], "NAME" => $раздел["NAME"] ); }
4. По окончании цикла вы будете иметь полный список разделов, в которых есть активные товары.
Приведенный выше код предлагает базовое решение вопроса и может быть расширен или оптимизирован в зависимости от конкретных требований и структуры вашего проекта.