1С-Битрикс предоставляет множество встроенных классов и методов для работы с информационными блоками и их элементами. Одним из важных и часто используемых инструментов является метод CIBlockSection::GetList()
, который служит для выборки и отображения разделов инфоблока. В данном материале мы подробно рассмотрим синтаксис метода, его параметры и несколько практических примеров.

Описание метода
CIBlockSection::GetList(
array arOrder = array("SORT"=>"ASC"),
array arFilter = array(),
bool bIncCnt = false,
array Select = array(),
array NavStartParams = false
);
Назначение
CIBlockSection::GetList()
— метод класса CIBlockSection
, возвращающий список разделов информационного блока по заданному фильтру и в требуемом порядке сортировки. Данный метод не является статическим, то есть к нему обращаются через создание объекта класса CIBlockSection
либо напрямую через вызов CIBlockSection::GetList()
.
Возвращаемое значение
Метод возвращает объект класса CIBlockResult
. Это специальный объект, реализующий интерфейс для последующей итерации по результату выборки. С ним можно работать, как с любым другим результатом запроса, используя стандартные методы вроде Fetch()
или GetNext()
для получения строк.
Параметры
- arOrder (массив)
Массив для определения порядка сортировки записей. Формат:
По умолчанию:array("поле_сортировки" => "ASC|DESC", ...)
array("SORT" => "ASC")
.
- Пример:array("NAME" => "ASC")
— сортировать по названию раздела по возрастанию.
- Можно указывать несколько критериев сортировки. Например:array("SORT" => "ASC", "NAME" => "DESC")
- arFilter (массив)
Массив для фильтрации разделов. Формат:
- Пример:array("поле_фильтра" => "значение", ...)
array("IBLOCK_ID" => 1, "ACTIVE" => "Y")
— выбирать только активные разделы из инфоблока с ID=1.
- Фильтр может включать в себя множество условий — например, поиск по ID родительского раздела, по XML_ID и т. д. - bIncCnt (логический параметр)
Отвечает за подсчет количества элементов в каждом разделе. По умолчанию имеет значениеfalse
.
- Если установить вtrue
, в каждом разделе к результатам добавится полеELEMENT_CNT
, указывающее количество элементов, входящих в этот раздел. - Select (массив)
Позволяет указывать, какие дополнительные поля необходимо выбрать, помимо основных (таких какID
,NAME
,CODE
и т. д.). По умолчанию — пустой массив.
- Пример:array("UF_*")
— выбрать все пользовательские поля (UF_*).
- Пример:array("PICTURE", "DESCRIPTION")
— добавить поляPICTURE
иDESCRIPTION
к стандартному набору. - NavStartParams (массив или
false
)
Параметры для постраничной навигации. Если передатьfalse
, то постраничная навигация не используется, и вернутся все подходящие разделы.
- Пример:
- Другие варианты:array( "nPageSize" => 10, // количество выводимых разделов на одной странице "iNumPage" => 2 // номер текущей страницы )
array("nTopCount" => 5)
— вернуть только первые 5 разделов.
Пример простого использования
Задача: получить все активные разделы из инфоблока с идентификатором 2
, отсортированные по возрастанию названия, и вывести на экран их названия и идентификаторы.
<?php
// Подключаем пролог, инициализируем систему
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
// Указываем фильтр
$arFilter = array(
"IBLOCK_ID" => 2,
"ACTIVE" => "Y",
);
// Указываем сортировку
$arOrder = array("NAME" => "ASC");
// Вызываем метод GetList
$sectionResult = CIBlockSection::GetList($arOrder, $arFilter, false);
// Перебираем результат
while ($section = $sectionResult->GetNext()) {
echo "ID раздела: " . $section["ID"] . "<br>";
echo "Название раздела: " . $section["NAME"] . "<br><br>";
}
?>
В данном примере:
- Мы не используем параметр bIncCnt
, поэтому элемент ELEMENT_CNT
не будет подсчитан.
- Не указываем параметр Select
, значит в $section
придут только стандартные поля (ID
, NAME
, CODE
, IBLOCK_ID
, IBLOCK_SECTION_ID
, и т. д.).
- Не используем постраничную навигацию, передав false
в качестве пятого параметра.
Пример с подсчетом элементов и пользовательскими полями
Предположим, у нас есть инфоблок с ID=3, где в разделах хранятся пользовательские поля. Нужно:
1. Получить все активные разделы.
2. Подсчитать количество элементов в каждом разделе.
3. Взять дополнительные пользовательские поля, начинающиеся на UF_
.
<?php
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
$arFilter = array(
"IBLOCK_ID" => 3,
"ACTIVE" => "Y",
);
$arOrder = array("SORT" => "ASC");
$bIncCnt = true; // Подсчитываем количество элементов
$arSelect = array("UF_*"); // Выбираем все пользовательские поля
// Постраничную навигацию не используем
$NavParams = false;
$sectionResult = CIBlockSection::GetList($arOrder, $arFilter, $bIncCnt, $arSelect, $NavParams);
while ($section = $sectionResult->GetNext()) {
echo "Раздел: " . $section["NAME"] . "<br>";
echo "Количество элементов: " . $section["ELEMENT_CNT"] . "<br>";
// Вывод пользовательских полей, если они есть
// Например, если есть UF_COLOR, выведем его значение
if (!empty($section["UF_COLOR"])) {
echo "Цвет: " . $section["UF_COLOR"] . "<br>";
}
echo "<hr>";
}
?>
Данный пример наглядно демонстрирует, как с помощью bIncCnt
получать количество элементов в каждом разделе, и как с помощью arSelect
можно выбрать все или конкретные пользовательские поля раздела.
Пример с постраничной навигацией
Если необходимо вывести разделы с постраничной навигацией (например, по 5 разделов на страницу), удобно использовать параметр NavStartParams
.
<?php
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
// Фильтр: активные разделы в инфоблоке 4
$arFilter = array("IBLOCK_ID" => 4, "ACTIVE" => "Y");
// Параметры сортировки: сначала по SORT, потом по ID
$arOrder = array("SORT" => "ASC", "ID" => "ASC");
// Параметры навигации
$NavStartParams = array(
"nPageSize" => 5, // по 5 разделов на страницу
"iNumPage" => 1, // номер текущей страницы
);
// Получаем результат
$sectionResult = CIBlockSection::GetList($arOrder, $arFilter, false, array(), $NavStartParams);
// Выводим список
while ($section = $sectionResult->GetNext()) {
echo "ID: " . $section["ID"] . "; Название: " . $section["NAME"] . "<br>";
}
// Выводим ссылки постраничной навигации
echo $sectionResult->NavPrint("Разделы");
?>
Здесь:
- arFilter
ограничивает выборку активными разделами из инфоблока 4
.
- Сортировка идет сначала по SORT
(ASC), потом по ID
(ASC).
- nPageSize => 5
— на одной странице показываем 5 разделов.
- iNumPage => 1
— выбираем первую страницу результатов.
- Для отображения ссылок постраничной навигации используется метод NavPrint()
, который можно настроить под нужды верстки или заменить более гибкой навигацией через компонент.
Работа с объектом CIBlockResult
Метод CIBlockSection::GetList()
возвращает объект класса CIBlockResult
. Этот класс используется во многих местах в 1С-Битрикс для работы с выборками из базы данных. Основные его методы, которые чаще всего применяются:
GetNext()
Возвращает ассоциативный массив следующей найденной записи, с индексами в формате["FIELD_NAME"] => "value"
.Fetch()
АналогиченGetNext()
, но возвращает названия полей в формате["FIELD_NAME"]
без преобразований (в частности, поля типаPICTURE
и пр. могут отличаться).GetFields()
Возвращает массив полей текущей записи.
Обычно в шаблонах и скриптах встречается классический цикл:
while ($arSection = $sectionResult->GetNext()) {
// Здесь $arSection уже содержит поля раздела
}
или
while ($arSection = $sectionResult->Fetch()) {
// В этом случае поля будут в "сыром" виде
}
Заключение
Метод CIBlockSection::GetList()
— один из ключевых инструментов для выборки разделов в 1С-Битрикс. Понимая принципы его работы и умея пользоваться всеми параметрами, вы можете гибко формировать списки разделов под любые задачи:
- Фильтровать по разным полям (ID, CODE, ACTIVE, GLOBAL_ACTIVE, и т. д.).
- Сортировать по нескольким критериям.
- Включать в выборку нужные поля, в том числе пользовательские.
- Использовать постраничную навигацию.
- Подсчитывать количество элементов в каждом разделе.
Знание и умелое применение данного метода во многом упрощает разработку функционала, связанного с информационными блоками, и позволяет легко управлять данными через стандартные механизмы 1С-Битрикс.