Чтобы получить список всех разделов, в которых находится элемент, достаточно вызвать функцию 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С Битрикс. Это может быть полезным, например, для вывода списка категорий на странице элемента.