Получение разделов инфоблока с помощью CIBlockSection::GetList()
Практически в каждом проекте на 1С-Битрикс возникает задача получить список разделов инфоблока: вывести меню каталога, построить дерево категорий, получить изображения разделов или просто сформировать навигацию. Для этого в классическом API используется метод CIBlockSection::GetList().
Несмотря на то что в новых версиях Битрикса появился D7 API, данный метод до сих пор активно применяется в реальных проектах и полностью подходит для большинства задач.
CIBlockSection::GetList(
array $arOrder = ["SORT" => "ASC"],
array $arFilter = [],
bool $bIncCnt = false,
array $arSelect = [],
array $arNavStartParams = false
);
Пример использования
Допустим, необходимо вывести все разделы каталога товаров. Сначала узнаем ID нужного инфоблока в административной панели.
В качестве фильтра достаточно указать идентификатор инфоблока:
$arFilter = [
'IBLOCK_ID' => 19
];
Далее определяем, какие поля нам понадобятся. Нет смысла выбирать всё подряд — лучше получать только необходимые данные.
$arSelect = [
'ID',
'NAME',
'SECTION_PAGE_URL',
'PICTURE'
];
После этого остается выполнить запрос и обработать результат.
$rsSections = CIBlockSection::GetList(
['SORT' => 'ASC'],
$arFilter,
false,
$arSelect
);
while ($arSection = $rsSections->GetNext())
{
echo '<pre>';
print_r($arSection);
echo '</pre>';
}
Получение данных
После выполнения метода можно получать данные несколькими способами.
GetNext()
Самый популярный вариант. Возвращает массив с уже обработанными значениями и автоматически приводит некоторые поля к удобному виду.
while ($arSection = $rsSections->GetNext())
{
echo $arSection['NAME'];
}
Fetch()
Возвращает данные без дополнительной обработки. Используется немного реже, но иногда бывает полезен при работе с оригинальными значениями полей.
while ($arSection = $rsSections->Fetch())
{
echo $arSection['NAME'];
}
Несколько полезных примеров
Получить только активные разделы
$arFilter = [
'IBLOCK_ID' => 19,
'ACTIVE' => 'Y'
];
Получить только корневые разделы
$arFilter = [
'IBLOCK_ID' => 19,
'SECTION_ID' => false
];
Получить подразделы определенного раздела
$arFilter = [
'IBLOCK_ID' => 19,
'SECTION_ID' => 15
];
Поиск раздела по символьному коду
$arFilter = [
'IBLOCK_ID' => 19,
'=CODE' => 'catalog'
];
Пользовательские поля разделов
Метод позволяет получать пользовательские поля (UF_*). Главное условие — в фильтре обязательно должен быть указан конкретный IBLOCK_ID.
$arSelect = [
'ID',
'NAME',
'UF_ICON',
'UF_COLOR'
];
Если необходимо использовать фильтрацию по пользовательским полям, они также указываются в массиве $arFilter.
Заключение
Несмотря на появление D7 API, CIBlockSection::GetList() остается одним из самых востребованных методов при разработке сайтов на 1С-Битрикс. Он прост в использовании, хорошо документирован и позволяет решать большинство задач по работе с разделами инфоблоков без лишнего кода.
Комментарии
Будем рады вашему мнению и вопросам по статье.