CIBlockSection::GetList в Битрикс — получение разделов инфоблока
Метод CIBlockSection::GetList() используется для получения списка разделов инфоблоков в 1С-Битрикс. С его помощью можно выбирать категории каталога, разделы новостей, дерево структуры сайта и любые другие разделы инфоблоков с использованием фильтрации, сортировки и постраничной навигации.
Краткий ответ
Для получения разделов инфоблока необходимо вызвать метод CIBlockSection::GetList(), указав параметры сортировки и фильтрации.
<?php
$res = CIBlockSection::GetList(
["SORT" => "ASC"],
["IBLOCK_ID" => 5]
);
while ($section = $res->Fetch()) {
echo $section["NAME"]."<br>";
}
Описание функции
Метод выполняет выборку разделов инфоблока из базы данных и возвращает объект результата, который можно обрабатывать через методы Fetch(), GetNext() или GetNextElement().
CIBlockSection::GetList поддерживает фильтрацию по инфоблоку, активности, родительскому разделу, глубине вложенности, символьному коду и другим параметрам.
Метод широко используется при построении меню каталога, хлебных крошек, дерева категорий и страниц разделов интернет-магазинов.
Синтаксис
CIBlockResult CIBlockSection::GetList(
array $arOrder = [],
array $arFilter = [],
bool $bIncCnt = false,
array $arSelect = []
);
Параметры
| Параметр | Тип | Описание |
|---|---|---|
| $arOrder | array | Массив сортировки результата. |
| $arFilter | array | Фильтр разделов. |
| $bIncCnt | bool | Подсчет количества элементов в разделе. |
| $arSelect | array | Список выбираемых полей. |
Популярные поля фильтра
| Поле | Описание |
|---|---|
| IBLOCK_ID | ID инфоблока. |
| ACTIVE | Активность раздела. |
| ID | ID раздела. |
| SECTION_ID | ID родительского раздела. |
| CODE | Символьный код раздела. |
| DEPTH_LEVEL | Уровень вложенности. |
| GLOBAL_ACTIVE | Активность с учетом родительских разделов. |
Пример использования
Получение всех разделов инфоблока
<?php
$res = CIBlockSection::GetList(
["LEFT_MARGIN" => "ASC"],
[
"IBLOCK_ID" => 5,
"ACTIVE" => "Y"
]
);
while ($section = $res->Fetch()) {
echo $section["NAME"]."<br>";
}
Получение дочерних разделов
<?php
$res = CIBlockSection::GetList(
["SORT" => "ASC"],
[
"IBLOCK_ID" => 5,
"SECTION_ID" => 10
]
);
while ($section = $res->Fetch()) {
print_r($section);
}
Получение раздела по символьному коду
<?php
$res = CIBlockSection::GetList(
[],
[
"IBLOCK_ID" => 5,
"CODE" => "notebooks"
]
);
$section = $res->Fetch();
echo $section["ID"];
Получение количества элементов в разделе
<?php
$res = CIBlockSection::GetList(
[],
[
"IBLOCK_ID" => 5
],
true
);
while ($section = $res->Fetch()) {
echo $section["NAME"];
echo " (".$section["ELEMENT_CNT"].")";
}
Выборка только нужных полей
<?php
$res = CIBlockSection::GetList(
[],
[
"IBLOCK_ID" => 5
],
false,
[
"ID",
"NAME",
"CODE"
]
);
Типичные ошибки
Не указан IBLOCK_ID
CIBlockSection::GetList(
[],
[]
);
Без фильтра по инфоблоку запрос может вернуть большое количество ненужных данных.
Использование SORT вместо LEFT_MARGIN для дерева
["SORT" => "ASC"]
Для корректного построения дерева разделов рекомендуется использовать сортировку по LEFT_MARGIN.
Ожидание количества элементов без bIncCnt
$section["ELEMENT_CNT"]
Поле ELEMENT_CNT будет доступно только при передаче третьего параметра true.
Использование Fetch вместо GetNext
Метод Fetch возвращает данные без HTML-обработки и дополнительных преобразований.
$section = $res->GetNext();
Для вывода данных в шаблонах чаще используется GetNext.
Аналог на D7
В новых проектах рекомендуется использовать ORM D7.
<?php
use Bitrix\Iblock\SectionTable;
$result = SectionTable::getList([
'select' => [
'ID',
'NAME',
'CODE'
],
'filter' => [
'=IBLOCK_ID' => 5,
'=ACTIVE' => 'Y'
],
'order' => [
'LEFT_MARGIN' => 'ASC'
]
]);
while ($section = $result->fetch()) {
print_r($section);
}
ORM обеспечивает более удобную работу с выборками и соответствует современным стандартам разработки на Битрикс.
FAQ
Что возвращает CIBlockSection::GetList?
Метод возвращает объект выборки CIBlockResult.
Как получить раздел по символьному коду?
[
"IBLOCK_ID" => 5,
"CODE" => "catalog"
]
Как получить только активные разделы?
[
"ACTIVE" => "Y"
]
Как узнать количество элементов в разделе?
Передайте третий параметр метода со значением true и используйте поле ELEMENT_CNT.
Как получить дерево разделов?
Используйте сортировку по полю LEFT_MARGIN.
[
"LEFT_MARGIN" => "ASC"
]
Что использовать в новых проектах?
Для новых разработок рекомендуется использовать Bitrix\Iblock\SectionTable и ORM D7. Метод CIBlockSection::GetList остается актуальным для поддержки существующих проектов и готовых решений на 1С-Битрикс.