Документация для разработчиков
Темная тема

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, ... - поле сортировки, может принимать значения:
  • id - код раздела;
  • section - код родительской раздела;
  • name - название раздела;
  • code - символьный код раздела;
  • active - активности раздела;
  • left_margin - левая граница;
  • depth_level - глубина вложенности (начинается с 1);
  • sort - индекс сортировки;
  • created - по времени создания раздела;
  • created_by - по идентификатору создателя раздела;
  • modified_by - по идентификатору пользователя изменившего раздел;
  • element_cnt - количество элементов в разделе, работает только если bIncCnt = true;
  • timestamp_x - по времени последнего изменения.
order1, ... - порядок сортировки, может принимать значения:
  • asc - по возрастанию;
  • desc - по убыванию.

Кроме того, сортировка возможна и по пользовательским свойствам UF_XXX.

Значение по умолчанию Array("SORT"=>"ASC") означает, что результат выборки будет отсортирован по возрастанию. Если задать пустой массив Array(), то результат отсортирован не будет.
arFilter Массив вида array("фильтруемое поле"=>"значение" [, ...]). Фильтруемое поле может принимать значения:
  • ACTIVE - фильтр по активности (Y|N);
  • GLOBAL_ACTIVE - фильтр по активности, учитывая активность вышележащих разделов (Y|N);
  • NAME - по названию (можно искать по шаблону [%_]);
  • CODE - по символьному коду (по шаблону [%_]);
  • XML_ID или EXTERNAL_ID - по внешнему коду (по шаблону [%_]);
  • SECTION_ID - по коду раздела-родителя (если указать false, то будут возвращены корневые разделы);
  • DEPTH_LEVEL - по уровню вложенности (начинается с 1);
  • LEFT_BORDER, RIGHT_BORDER - по левой и правой границе (используется, когда необходимо выбрать некий диапазон разделов, см. пример №4);
  • LEFT_MARGIN, RIGHT_MARGIN - по положению в дереве (используется, когда необходима выборка дерева подразделов, см. пример №4);
  • ID - по коду раздела;
  • IBLOCK_ID - по коду родительского информационного блока. Обязателен, если нужно получить пользовательское свойство;
  • IBLOCK_ACTIVE - по активности родительского информационного блока;
  • IBLOCK_NAME - по названию информационного блока (по шаблону [%_]);
  • IBLOCK_TYPE - по типу информационного блока (по шаблону [%_]);
  • IBLOCK_CODE - по символьному коду информационного блока (по шаблону [%_]);
  • IBLOCK_XML_ID или IBLOCK_EXTERNAL_ID - по внешнему коду информационного блока (по шаблону [%_]);
  • TIMESTAMP_X - по времени последнего изменения;
  • DATE_CREATE - по времени создания;
  • MODIFIED_BY - по коду пользователя изменившему раздел;
  • CREATED_BY - по содателю;
  • SOCNET_GROUP_ID - по привязке к группе Социальной сети;
  • MIN_PERMISSION - фильтр по правам доступа, по умолчанию принимает R (уровень доступа Чтение);
  • CHECK_PERMISSIONS - если установлено значение "N", то проверки прав не происходит;
  • PERMISSIONS_BY - фильтрация по правам произвольного пользователя. Значение - ID пользователя или 0 (неавторизованный).
  • PROPERTY - по значениям свойств внутрилежащих элементов, PROPERTY - массив вида Array("код свойства"=>"значение", ...).
  • HAS_ELEMENT - по наличию элемента. Используется в компоненте catalog.detail.
Все фильтруемые поля могут содержать перед названием тип проверки фильтра.

Значения фильтра одиночное значение или массив.

Важно! Чтобы фильтрация выполнялась по пользовательским свойствам, необходимо обязательно передавать в фильтр IBLOCK_ID. Само свойство надо указывать в виде UF_...

Необязательное. По умолчанию записи не фильтруются.
bIncCnt Возвращать ли поле ELEMENT_CNT - количество элементов в разделе. При этом arFilter дополнительно обрабатывает следующие фильтруемые поля:
  • ELEMENT_SUBSECTIONS - подсчитывать элементы вложенных подразделов или нет (Y|N). По умолчанию Y;
  • CNT_ALL - подсчитывать еще неопубликованные элементы (Y|N). По умолчанию N. Актуально при установленном модуле документооборота;
  • CNT_ACTIVE - при подсчете учитывать активность элементов (Y|N). По умолчанию N. Учитывается флаг активности элемента ACTIVE и даты начала и окончания активности.
Необязательный параметр, по умолчанию равен false.

Примечание: в случае если в фильтре есть ключ PROPERTY то в количестве элементов вернется то значение, которое попадает под этот фильтр по значению свойств.

arSelect Массив для выборки.
  • ID - ID группы информационного блока.
  • CODE - Символьный идентификатор.
  • EXTERNAL_ID или XML_ID - Внешний код.
  • IBLOCK_ID - ID информационного блока.
  • IBLOCK_SECTION_ID - ID группы родителя, если не задан то группа корневая.
  • TIMESTAMP_X - Дата последнего изменения параметров группы.
  • SORT - Порядок сортировки (среди групп внутри одной группы-родителя).
  • NAME - Наименование группы.
  • ACTIVE - Флаг активности (Y|N)
  • GLOBAL_ACTIVE - Флаг активности, учитывая активность вышележащих (родительских) групп (Y|N). Вычисляется автоматически (не может быть изменен вручную).
  • PICTURE - Код картинки в таблице файлов.
  • DESCRIPTION - Описание группы.
  • DESCRIPTION_TYPE - Тип описания группы (text/html).
  • LEFT_MARGIN - Левая граница группы. Вычисляется автоматически (не устанавливается вручную).
  • RIGHT_MARGIN - Правая граница группы. Вычисляется автоматически (не устанавливается вручную).
  • DEPTH_LEVEL - Уровень вложенности группы. Начинается с 1. Вычисляется автоматически (не устанавливается вручную).
  • SEARCHABLE_CONTENT Содержимое для поиска при фильтрации групп. Вычисляется автоматически. Складывается из полей NAME и DESCRIPTION (без html тэгов, если DESCRIPTION_TYPE установлен в html).
  • SECTION_PAGE_URL - Шаблон URL-а к странице для детального просмотра раздела. Определяется из параметров информационного блока. Изменяется автоматически.
  • MODIFIED_BY - Код пользователя, в последний раз изменившего элемент.
  • DATE_CREATE - Дата создания элемента.
  • CREATED_BY - Код пользователя, создавшего элемент.
  • DETAIL_PICTURE - Код картинки в таблице файлов для детального просмотра.
Кроме того, можно вывести пользовательские свойства, если задать их код (см. примечание ниже).
6.0.3
arNavStartParams Массив для постраничной навигации. Может содержать следующие ключи:
  • bShowAll - разрешить вывести все элементы при постраничной навигации;
  • iNumPage - номер страницы при постраничной навигации;
  • nPageSize - количество элементов на странице при постраничной навигации;
  • nTopCount - ограничить количество возвращаемых методом записей сверху значением этого ключа (ключ доступен с версии 15.5.5 ).
Если в параметр передать пустой массив, то результат выборки будет ограничен десятью записями. А если передать значение false - то выборка будет полной.
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-2024, «1С-Битрикс», 2024