Метод CIBlockSection::Add() используется для программного создания разделов инфоблока в 1С-Битрикс. С его помощью можно добавлять категории каталога, разделы новостей, подразделы и любые другие разделы инфоблоков.
Краткий ответ
Для создания раздела необходимо создать объект класса CIBlockSection, подготовить массив полей и вызвать метод Add().
<?php
$bs = new CIBlockSection();
$arFields = [
"IBLOCK_ID" => 5,
"NAME" => "Новый раздел",
"ACTIVE" => "Y"
];
$ID = $bs->Add($arFields);
if ($ID) {
echo "Создан раздел: ".$ID;
} else {
echo $bs->LAST_ERROR;
}
Описание функции
Метод создает новый раздел в указанном инфоблоке и возвращает его идентификатор. При возникновении ошибки возвращается false, а текст ошибки доступен через свойство LAST_ERROR.
С помощью CIBlockSection::Add можно создавать как корневые разделы, так и вложенные подразделы любой глубины.
Метод поддерживает установку изображений, SEO-настроек, символьных кодов и пользовательских полей раздела.
Синтаксис
int|false CIBlockSection::Add(
array $arFields,
bool $bResort = true,
bool $bUpdateSearch = true,
bool $bResizePictures = false
);
Параметры
| Параметр |
Тип |
Описание |
| $arFields |
array |
Массив полей создаваемого раздела. |
| $bResort |
bool |
Перестроение дерева разделов после создания. |
| $bUpdateSearch |
bool |
Обновление поискового индекса. |
| $bResizePictures |
bool |
Автоматическое изменение размеров изображений. |
Основные поля массива arFields
| Поле |
Описание |
| IBLOCK_ID |
ID инфоблока. |
| NAME |
Название раздела. |
| ACTIVE |
Активность раздела. |
| CODE |
Символьный код. |
| IBLOCK_SECTION_ID |
ID родительского раздела. |
| DESCRIPTION |
Описание раздела. |
| PICTURE |
Изображение раздела. |
| DETAIL_PICTURE |
Детальное изображение. |
| SORT |
Порядок сортировки. |
Пример использования
Создание корневого раздела
<?php
$bs = new CIBlockSection();
$arFields = [
"IBLOCK_ID" => 5,
"NAME" => "Ноутбуки",
"ACTIVE" => "Y",
"CODE" => "notebooks"
];
$ID = $bs->Add($arFields);
if (!$ID) {
echo $bs->LAST_ERROR;
}
Создание подраздела
<?php
$arFields = [
"IBLOCK_ID" => 5,
"IBLOCK_SECTION_ID" => 10,
"NAME" => "Игровые ноутбуки",
"ACTIVE" => "Y"
];
$bs = new CIBlockSection();
$ID = $bs->Add($arFields);
Создание раздела с изображением
<?php
$arFields = [
"IBLOCK_ID" => 5,
"NAME" => "Смартфоны",
"PICTURE" => CFile::MakeFileArray(
$_SERVER["DOCUMENT_ROOT"]."/upload/section.jpg"
)
];
$bs = new CIBlockSection();
$ID = $bs->Add($arFields);
Создание раздела с описанием
<?php
$arFields = [
"IBLOCK_ID" => 5,
"NAME" => "Планшеты",
"DESCRIPTION" => "Каталог планшетов различных производителей.",
"DESCRIPTION_TYPE" => "html"
];
$bs = new CIBlockSection();
$ID = $bs->Add($arFields);
Типичные ошибки
Не указан IBLOCK_ID
$arFields = [
"NAME" => "Раздел"
];
Без ID инфоблока создать раздел невозможно.
Не заполнено обязательное поле NAME
$arFields = [
"IBLOCK_ID" => 5
];
Название раздела является обязательным полем.
Неверный родительский раздел
"IBLOCK_SECTION_ID" => 999999
Если родительский раздел не существует, создание завершится ошибкой.
Неправильная загрузка изображения
"PICTURE" => "/upload/image.jpg"
Для загрузки изображений необходимо использовать CFile::MakeFileArray().
Отсутствие проверки результата
$ID = $bs->Add($arFields);
Всегда проверяйте результат выполнения и выводите LAST_ERROR при ошибке.
Аналог на D7
В ORM D7 для работы с разделами используется класс Bitrix\Iblock\SectionTable.
<?php
use Bitrix\Iblock\SectionTable;
$result = SectionTable::add([
"IBLOCK_ID" => 5,
"NAME" => "Новый раздел",
"ACTIVE" => "Y"
]);
if ($result->isSuccess()) {
echo $result->getId();
} else {
print_r(
$result->getErrorMessages()
);
}
ORM D7 обеспечивает более удобную работу с данными и рекомендуется для новых проектов.
FAQ
Что возвращает CIBlockSection::Add?
При успешном создании возвращается ID нового раздела. В случае ошибки возвращается false.
Как получить текст ошибки?
echo $bs->LAST_ERROR;
Как создать подраздел?
Укажите ID родительского раздела в поле IBLOCK_SECTION_ID.
Можно ли загрузить изображение раздела?
Да. Для этого используются поля PICTURE и DETAIL_PICTURE.
Как задать символьный код?
"CODE" => "catalog"
Если код не указан, Битрикс может сгенерировать его автоматически при соответствующих настройках инфоблока.
Что использовать в новых проектах?
Для новых разработок рекомендуется использовать ORM D7 и класс Bitrix\Iblock\SectionTable. Метод CIBlockSection::Add остается актуальным для поддержки существующих проектов и готовых решений на 1С-Битрикс.