Метод 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С-Битрикс.