Столкнулся с элементарной проблемой, но долго не мог решить. Нужно вывести все разделы и подразделы в виде массива. Официальная документация конечно не помогла. Но вот что я всё таки нашел.
Случай 1.
Нам надо вывести все разделы в виде одноуровнего массива
$rs_Section = CIBlockSection::GetList(array('left_margin' => 'asc'), array('IBLOCK_ID' => 8)); while ( $ar_Section = $rs_Section->Fetch() ) { $ar_Result[] = array( 'ID' => $ar_Section['ID'], 'NAME' => $ar_Section['NAME'], 'IBLOCK_SECTION_ID' => $ar_Section['IBLOCK_SECTION_ID'], 'IBLOCK_SECTION_ID' => $ar_Section['IBLOCK_SECTION_ID'], 'LEFT_MARGIN' => $ar_Section['LEFT_MARGIN'], 'RIGHT_MARGIN' => $ar_Section['RIGHT_MARGIN'], 'DEPTH_LEVEL' => $ar_Section['DEPTH_LEVEL'], ); }
Так выводиться стандартный массив без иерархии и уровня вложенности.
Случай 2.
Надо вывести разделы с иерархией и уровнем вложености
function getSectionList($filter, $select) { $dbSection = CIBlockSection::GetList( Array( 'LEFT_MARGIN' => 'ASC', ), array_merge( Array( 'ACTIVE' => 'Y', 'GLOBAL_ACTIVE' => 'Y' ), is_array($filter) ? $filter : Array() ), false, array_merge( Array( 'ID', 'IBLOCK_SECTION_ID' ), is_array($select) ? $select : Array() ) ); while( $arSection = $dbSection-> GetNext(true, false) ){ $SID = $arSection['ID']; $PSID = (int) $arSection['IBLOCK_SECTION_ID']; $arLincs[$PSID]['CHILDS'][$SID] = $arSection; $arLincs[$SID] = &$arLincs[$PSID]['CHILDS'][$SID]; } return array_shift($arLincs); }
Пример использования
$arSections = getSectionList( Array( 'IBLOCK_ID' => 25 ), Array( 'NAME', 'SECTION_PAGE_URL' ) );