GetList
Описание
CIBlockResult
CIBlockSection::GetList(
	array arOrder = Array("SORT"=>"ASC"),
	array arFilter = Array(),
	bool bIncCnt = false,
	array Select = Array(),
	array NavStartParams = false
);
 
Возвращает список разделов, отсортированных в порядке arOrder по фильтру arFilter. Нестатический метод.
Смотрите также
Параметры вызова
| Параметр | Описание | С версии | 
|---|---|---|
| arOrder |  Массив для сортировки, имеющий вид by1=>order1[, by2=>order2 [, ..]], где  by1, ...  - поле сортировки, может принимать значения: 
        
 
 Кроме того, сортировка возможна и по пользовательским свойствам UF_XXX. Значение по умолчанию Array("SORT"=>"ASC") означает, что результат выборки будет отсортирован по возрастанию. Если задать пустой массив Array(), то результат отсортирован не будет.  |  |
| arFilter | Массив вида array("фильтруемое поле"=>"значение" [, ...]). 	Фильтруемое поле может принимать значения: 
        
 Значения фильтра одиночное значение или массив. Важно! Чтобы фильтрация выполнялась по пользовательским свойствам, необходимо обязательно передавать в фильтр IBLOCK_ID. Само свойство надо указывать в виде UF_...  Необязательное. По умолчанию записи не фильтруются.  | |
| bIncCnt |  		Возвращать ли поле ELEMENT_CNT - количество элементов в разделе. При этом arFilter дополнительно обрабатывает следующие фильтруемые поля: 
          
 Примечание: в случае если в фильтре есть ключ PROPERTY то в количестве элементов вернется то значение, которое попадает под этот фильтр по значению свойств.  | |
| arSelect | Массив для выборки.
  |  6.0.3 | 
| arNavStartParams | Массив для постраничной навигации. Может содержать следующие ключи: 	
  | 11.0.0 | 
Возвращаемое значение
Возвращается объект CIBlockResultПримечание №1: для вывода пользовательских свойств обязательно должен быть передан IBLOCK_ID и в arSelect код необходимых свойств UF_XXX. Если необходимо вывести все пользовательские свойства, то в arSelect необходимо передать UF_*.
Примечание №2: поле для сортировки left_margin, так называемая "сквозная" сортировка, высчитывается на основании поля sort, уровня вложенности и сортировкой верхнего уровня. Отличие полей sort и left_margin в том, что sort указывается пользователем, для сортировки разделов между собой в пределах одного раздела-родителя, а вычисляемое left_margin предназначено для сортировки во всем информационном блоке. 
Примечание №3: нет возможности фильтровать разделы в выборке  по количеству элементов.
Дополнительно
Выбор пользовательских свойств разделов возможен только при передаче в ключ фильтра IBLOCK_ID одиночного значения.
Примеры использования
Пример 1:
<?
$arIBTYPE = CIBlockType::GetByIDLang($type, LANGUAGE_ID);
if($arIBTYPE!==false)
{
	// выборка только активных разделов из инфоблока $IBLOCK_ID, в которых есть элементы 
	// со значением свойства SRC, начинающееся с https://
	$arFilter = Array('IBLOCK_ID'=>$IBLOCK_ID, 'GLOBAL_ACTIVE'=>'Y', 'PROPERTY'=>Array('SRC'=>'https://%'));
	$db_list = CIBlockSection::GetList(Array($by=>$order), $arFilter, true);
	$db_list->NavStart(20);
	echo $db_list->NavPrint($arIBTYPE["SECTION_NAME"]);
	while($ar_result = $db_list->GetNext())
	{
		echo $ar_result['ID'].' '.$ar_result['NAME'].': '.$ar_result['ELEMENT_CNT'].'<br>';
	}
	echo $db_list->NavPrint($arIBTYPE["SECTION_NAME"]);
}
?>
Пример 2:
//пример выборки дерева подразделов для раздела 
$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())
	{
		// получаем подразделы
	}
}
Пример 3:
//в шаблоне меню, построенного по структуре инфоблока, менять ссылку на элемент, если заполнено пользовательское поле 
<? 
//внутри цикла построения меню
$uf_iblock_id = 1; //ID инфоблока
$uf_name = Array("UF_PAGE_LINK"); //пользовательское поле UF_PAGE_LINK
preg_match('/\?ID=([0-9]+)\&?/i', $arItem["LINK"], $matches); //SEF отключен, поэтому спокойно берем SECTION_ID из ссылки по шаблону ID=#SECTION_ID#
$uf_section_id = $matches[1];
if(CModule::IncludeModule("iblock")): //подключаем модуль инфоблок для работы с классом CIBlockSection
	$uf_arresult = CIBlockSection::GetList(Array("SORT"=>"ASC"), Array("IBLOCK_ID" => $uf_iblock_id, "ID" => $uf_section_id), false, $uf_name);
	if($uf_value = $uf_arresult->GetNext()):
		if(strlen($uf_value["UF_PAGE_LINK"]) > 0): //проверяем что поле заполнено
			$arItem["LINK"] = $uf_value["UF_PAGE_LINK"]; //подменяем ссылку и используем её в дальнейшем
		endif;
	endif;
endif;
?> 
Пример 4:
//рассмотрим разницу использования фильтра по LEFT_MARGIN, RIGHT_MARGIN и LEFT_BORDER, RIGHT_BORDER
//допустим, что у некоторого раздела LEFT_MARGIN (значение в базе) = 10, RIGHT_MARGIN (значение в базе) = 40
//в первом примере кода будет выбран как сам раздел, так и все его подразделы,
//поскольку всегда LEFT_MARGIN раздела-потомка > LEFT_MARGIN раздела-родителя
//и RIGHT_MARGIN раздела-потомка < RIGHT_MARGIN раздела-родителя
$arFilter = array('IBLOCK_ID' => 10, 'LEFT_MARGIN' => 10, 'RIGHT_MARGIN' => 40);
$rsSections = CIBlockSection::GetList(array('LEFT_MARGIN' => 'ASC'), $arFilter);
while ($arSection = $rsSections->Fetch())
{
	echo htmlspecialcharsbx($arSection['NAME']).' LEFT_MARGIN: '.$arSection['LEFT_MARGIN'].' RIGHT_MARGIN: '.$arSection['RIGHT_MARGIN'].'<br>';
}
//во втором примере кода будет возвращена только одна запись - сам раздел
$arFilter = array('IBLOCK_ID' => 10, 'LEFT_BORDER' => 10, 'RIGHT_BORDER' => 40);
$rsSections = CIBlockSection::GetList(array('LEFT_MARGIN' => 'ASC'), $arFilter);
while ($arSction = $rsSections->Fetch())
{
	echo htmlspecialcharsbx($arSection['NAME']).' LEFT_MARGIN: '.$arSection['LEFT_MARGIN'].' RIGHT_MARGIN: '.$arSection['RIGHT_MARGIN'].'<br>';
}
					© «Битрикс», 2001-2025, «1С-Битрикс», 2025