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