Главная » API Битрикс » CIBlockSection » CIBlockSection::Update в Битрикс — обновление раздела инфоблока

CIBlockSection::Update в Битрикс — обновление раздела инфоблока

Метод 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С-Битрикс.
    Нужна помощь с Битрикс?

    Исправим ошибку, доработаем сайт, ускорим Битрикс или поможем разобраться с проблемой.

    Услуги
    Инструменты
    База знаний