Разделы инфоблоков — это основа для построения каталогов, иерархических списков и любой другой вложенной структуры на сайте. Для работы с ними в старом API Битрикс предназначен класс CIBlockSection. Его методы очень похожи на CIBlockElement, что делает их изучение интуитивно понятным.
1. Выборка разделов: CIBlockSection::GetList
Этот статический метод позволяет получать разделы с гибкими условиями.
Синтаксис:
CModule::IncludeModule('iblock');
$rsSections = CIBlockSection::GetList(
$arOrder, // Сортировка
$arFilter, // Фильтр
$bIncCnt, // Флаг подсчета элементов в разделе
$arSelect, // Выбираемые поля
$arNav // Постраничная навигация
);
Пример: Получение всех активных разделов верхнего уровня
Разделы верхнего уровня — это те, у которых DEPTH_LEVEL равен 1 или SECTION_ID равен false.
$arFilter = [
'IBLOCK_ID' => 5, // ID инфоблока
'ACTIVE' => 'Y', // Только активные
'DEPTH_LEVEL' => 1 // Только первый уровень вложенности
];
$arSelect = ['ID', 'NAME', 'CODE', 'SECTION_PAGE_URL'];
$rsSections = CIBlockSection::GetList(['SORT' => 'ASC'], $arFilter, false, $arSelect);
while ($arSection = $rsSections->GetNext()) {
echo '<a href="'.$arSection['SECTION_PAGE_URL'].'">'.$arSection['NAME'].'</a><br>';
}
- $bIncCnt (третий параметр): Если установить в true, в результате будет доступно поле ELEMENT_CNT, содержащее количество активных элементов в этом разделе. Это полезно, но может замедлить запрос.
- Выборка пользовательских полей (UF*): Чтобы выбрать UF-поле, просто добавьте его в массив $arSelect, например, ‘UF_MY_FIELD’.
2. Добавление раздела: CIBlockSection::Add
Для добавления раздела нужно создать экземпляр класса CIBlockSection.
$bs = new CIBlockSection;
$arFields = [
"ACTIVE" => "Y",
"IBLOCK_ID" => 5,
"NAME" => "Новый раздел",
"CODE" => "new_section",
"SORT" => 500,
"IBLOCK_SECTION_ID" => 12 // ID родительского раздела. Если не указать, раздел станет корневым.
];
$ID = $bs->Add($arFields);
if ($ID > 0) {
echo "Раздел успешно создан с ID: " . $ID;
} else {
echo "Ошибка: " . $bs->LAST_ERROR;
}
- IBLOCK_SECTION_ID: Ключевое поле для построения иерархии. Указывает на родительский раздел.
3. Обновление раздела: CIBlockSection::Update
Метод Update похож на Add, но первым параметром принимает ID раздела, который нужно изменить.
$bs = new CIBlockSection;
$idToUpdate = 45; // ID раздела для обновления
$arFields = [
"NAME" => "Обновленное название раздела",
"ACTIVE" => "N" // Деактивируем раздел
];
if ($bs->Update($idToUpdate, $arFields)) {
echo "Раздел успешно обновлен.";
} else {
echo "Ошибка: " . $bs->LAST_ERROR;
}
4. Удаление раздела: CIBlockSection::Delete
Статический метод Delete удаляет раздел и все его дочерние подразделы и элементы. Будьте осторожны при его использовании!
$idToDelete = 45;
if (CIBlockSection::Delete($idToDelete)) {
echo "Раздел и все его содержимое удалены.";
} else {
// В случае ошибки, глобальная переменная $APPLICATION будет содержать исключение
if ($ex = $APPLICATION->GetException()) {
echo "Ошибка удаления: " . $ex->GetString();
}
}
Вывод:
Класс CIBlockSection предоставляет полный набор инструментов для управления структурой каталога. Логика работы с ним практически идентична CIBlockElement, что упрощает разработку. Главное — помнить об иерархии и поле IBLOCK_SECTION_ID, а также об опасности рекурсивного удаления методом Delete.
CIBlockSection, GetList, Add, Update, Delete, разделы инфоблоков, Битрикс, иерархия, управление разделами, API Битрикс.