Получение списка всех разделов, в которых находится элемент

Получение списка всех разделов, в которых находится элемент

13.06.2023
487
Узнайте, как получить список всех разделов, в которых находится элемент.

Чтобы получить список всех разделов, в которых находится элемент, достаточно вызвать функцию checkMinForSection. В качестве первого аргумента нужно передать ID элемента, а вторым аргументом можете указать количество разделов, которые нужно получить сверху. Если вы не хотите ограничивать количество разделов, просто передайте значение -1.

function sectionClose($arSect,$sectionId){

    // Получаем раздел по его ID
    $r_sect = CIBlockSection::GetByID($sectionId);
    if($section = $r_sect->GetNext()) {

        // Добавляем ID раздела в массив
        $arSect[] = $section["ID"];
        if($section["IBLOCK_SECTION_ID"] > 0) {

            // Повторный запуск функции пока не получим все до корня
            $arSect = sectionClose($arSect,$section["IBLOCK_SECTION_ID"]);
        }
    }
    return $arSect;
}

function checkMinForSection($elementId,$sectionsRemain){

    // Получаем список разделов, в которых находится элемент
    $rsSections = CIBlockElement::GetElementGroups($elementId, true);
    $arSections = array();
    while ($arSection = $rsSections->Fetch()) {

        // Получаем основной раздел
        $r_sect = CIBlockSection::GetByID($arSection["ID"]);
        if($section = $r_sect->GetNext()){
            $arSections[] = $section["ID"];//ID раздела
            if($section["IBLOCK_SECTION_ID"] > 0) {

                // Получаем еще раздел верхнего уровня до корня
                $arSections = sectionClose($arSections,$section["IBLOCK_SECTION_ID"]);
            }
        }
    }
    return $arSections;
}

Функция sectionClose($arSect,$sectionId)

Данная функция получает массив $arSect и ID раздела $sectionId. Далее происходит поиск раздела по его ID и добавление ID раздела в массив $arSect. Если у раздела есть родительский раздел, то функция запускает саму себя с родительским разделом. Функция возвращает массив $arSect с ID разделов до корня.

Функция checkMinForSection($elementId,$sectionsRemain)

Данная функция получает ID элемента $elementId и оставшееся количество разделов $sectionsRemain. Далее происходит получение списка разделов, в которых находится элемент, и основного раздела. ID основного раздела добавляется в массив $arSections. Если у основного раздела есть родительский раздел, то функция вызывает функцию sectionClose для получения разделов до корня. Функция возвращает массив $arSections с ID всех разделов, в которых находится элемент.

Заключение

Теперь вы знаете, как получить список всех разделов, в которых находится элемент в 1С Битрикс. Это может быть полезным, например, для вывода списка категорий на странице элемента.