Главная » API Битрикс » CIBlockElement::Update в Битрикс — обновление элемента инфоблока

CIBlockElement::Update в Битрикс — обновление элемента инфоблока

Метод CIBlockElement::Update() используется для изменения существующих элементов инфоблоков в 1С-Битрикс. С его помощью можно обновлять названия, тексты, изображения, разделы, SEO-параметры и другие поля элемента.

Краткий ответ

Для обновления элемента необходимо создать объект класса CIBlockElement, указать ID элемента и массив изменяемых полей, после чего вызвать метод Update().

<?php

$el = new CIBlockElement();

$arFields = [
    "NAME" => "Новое название"
];

if ($el->Update(123, $arFields)) {
    echo "Элемент обновлен";
} else {
    echo $el->LAST_ERROR;
}

Описание функции

Метод обновляет существующий элемент инфоблока по его идентификатору. Изменяются только поля, переданные в массиве $arFields. Остальные данные остаются без изменений.

CIBlockElement::Update позволяет изменять основные поля элемента, изображения, SEO-настройки, привязки к разделам и пользовательские свойства.

При возникновении ошибки метод возвращает false, а подробное описание ошибки доступно через свойство LAST_ERROR.

Нужна помощь с Битрикс?





    Синтаксис

    bool CIBlockElement::Update(
        int $ID,
        array $arFields,
        bool $bWorkFlow = false,
        bool $bUpdateSearch = true,
        bool $bResizePictures = false,
        bool $bCheckDiskQuota = true
    );
    

    Параметры

    Параметр Тип Описание
    $ID int ID обновляемого элемента.
    $arFields array Массив изменяемых полей.
    $bWorkFlow bool Использование документооборота.
    $bUpdateSearch bool Обновление поискового индекса.
    $bResizePictures bool Автоматическое изменение размеров изображений.
    $bCheckDiskQuota bool Проверка доступного места на диске.

    Наиболее используемые поля

    Поле Описание
    NAME Название элемента.
    ACTIVE Активность элемента.
    CODE Символьный код.
    PREVIEW_TEXT Текст анонса.
    DETAIL_TEXT Подробное описание.
    PREVIEW_PICTURE Картинка анонса.
    DETAIL_PICTURE Детальная картинка.
    IBLOCK_SECTION_ID Основной раздел.
    TAGS Теги элемента.

    Пример использования

    Обновление названия элемента

    <?php
    
    $el = new CIBlockElement();
    
    $arFields = [
        "NAME" => "Обновленное название"
    ];
    
    $result = $el->Update(123, $arFields);
    
    if (!$result) {
        echo $el->LAST_ERROR;
    }
    

    Изменение текста и активности

    <?php
    
    $arFields = [
        "ACTIVE" => "Y",
        "PREVIEW_TEXT" => "Новый анонс",
        "DETAIL_TEXT" => "Обновленный подробный текст"
    ];
    
    $el = new CIBlockElement();
    
    if (!$el->Update(123, $arFields)) {
        echo $el->LAST_ERROR;
    }
    

    Обновление изображения

    <?php
    
    $arFields = [
        "DETAIL_PICTURE" => CFile::MakeFileArray(
            $_SERVER["DOCUMENT_ROOT"]."/upload/new-image.jpg"
        )
    ];
    
    $el = new CIBlockElement();
    $el->Update(123, $arFields);
    

    Обновление свойств элемента

    Метод Update не всегда корректно обновляет свойства через массив полей. Для изменения свойств рекомендуется использовать отдельный метод:

    <?php
    
    CIBlockElement::SetPropertyValuesEx(
        123,
        7,
        [
            "PRICE" => 15990,
            "BRAND" => "Samsung"
        ]
    );
    

    Типичные ошибки

    Указан неверный ID элемента

    $el->Update(999999, $arFields);
    

    Если элемент не существует, обновление выполнено не будет.


    Не проверяется результат выполнения

    $el->Update($ID, $arFields);
    

    Всегда проверяйте результат и выводите ошибку через LAST_ERROR.

    if (!$el->Update($ID, $arFields)) {
        echo $el->LAST_ERROR;
    }
    

    Попытка обновить свойства через Update

    $arFields["PROPERTY_VALUES"] = [
        "PRICE" => 1000
    ];
    

    Для надежного обновления свойств лучше использовать метод CIBlockElement::SetPropertyValuesEx().


    Неправильная загрузка изображения

    "DETAIL_PICTURE" => "/upload/image.jpg"
    

    Необходимо передавать массив файла через CFile::MakeFileArray().

    Аналог на D7

    В современных версиях Битрикс рекомендуется использовать ORM-классы инфоблоков.

    <?php
    
    use Bitrix\Iblock\Elements\ElementNewsTable;
    
    $result = ElementNewsTable::update(
        123,
        [
            'NAME' => 'Новое название',
            'ACTIVE' => 'Y'
        ]
    );
    
    if (!$result->isSuccess()) {
        print_r($result->getErrorMessages());
    }
    

    Для работы через D7 необходимо предварительно сгенерировать ORM-классы инфоблоков в административной части сайта.

    FAQ

    Что возвращает CIBlockElement::Update?

    Метод возвращает true при успешном обновлении и false при возникновении ошибки.

    Как получить текст ошибки?

    echo $el->LAST_ERROR;
    

    Можно ли изменить только одно поле?

    Да. Метод обновляет только поля, указанные в массиве $arFields.

    Как обновить свойства элемента?

    Для этого рекомендуется использовать CIBlockElement::SetPropertyValuesEx().

    Как изменить раздел элемента?

    $arFields = [
        "IBLOCK_SECTION_ID" => 15
    ];
    

    После вызова Update элемент будет привязан к новому основному разделу.

    Что использовать в новых проектах?

    Для современных проектов рекомендуется использовать ORM D7. Однако CIBlockElement::Update по-прежнему широко применяется для поддержки существующих сайтов и готовых решений на 1С-Битрикс.

    Нужна помощь с Битрикс?

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

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