1C-Битрикс: Управление сайтом

CIBlockElement::Update

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

Метод изменяет параметры элемента с кодом ID. Перед изменением элемента вызываются обработчики события  OnStartIBlockElementUpdate из которых можно изменить значения полей или отменить изменение элемента вернув сообщение об ошибке. После изменения элемента вызывается само событие OnAfterIBlockElementUpdate.

Если изменяется свойство типа файл, то необходимо сформировать массив.

Параметры функции

Параметр Описание
ID ID изменяемой записи.
arFields Массив вида Array("поле"=>"значение", ...), содержащий значения полей элемента инфоблоков и дополнительно может содержать поле "PROPERTY_VALUES" - массив со всеми значениями свойств элемента в виде массива Array("код свойства"=>"значение свойства"). Где
"код свойства" - числовой или мнемонический код свойства,
"значение свойства" - одиночное значение, либо массив значений (если свойство множественное).
Если массив PROPERTY_VALUES задан, то он должен содержать полный набор значений свойств для данного элемента, т.е. если в нем будет отсутствовать одно из свойств, то все его значения для данного элемента будут удалены.
Это справедливо для всех типов свойств кроме типа файл. Файлы надо удалять через массив с параметром "del"=>"Y".
Дополнительно для сохранения значения свойств см: CIBlockElement::SetPropertyValues(), CIBlockElement::SetPropertyValueCode().

Примечание: Нельзя изменить изначения полей ID и IBLOCK_ID.
bWorkFlow Изменение в режиме документооборота. Если true и модуль документооборота установлен, то данное изменение будет учтено в журнале изменений элемента. Не обязательный параметр, по умолчанию изменение в режиме документооборота отключено.

Примечание: в режиме документооборота можно передавать значения не всех свойств в PROPERTY_VALUES, а только необходимых.
bUpdateSearch Индексировать элемент для поиска. Для повышения производительности можно отключать этот параметр во время серии изменений элементов, а после их окончания переиндексировать поиск. Не обязательный параметр, по умолчанию элемент после изменения будет автоматически проиндексирован в поиске.
bResizePicturesИспользовать настройки инфоблока для обработки изображений. По умоляанию настройки не применяются. Если этот параметр имеет значение true, то к полям PREVIEW_PICTURE и DETAIL_PICTURE будут применены правила генерации и масштабирования в соответствии с настройками информационного блока.

Возвращаемое значение

Метод возвращает true если изменение прошло успешно, при возникновении ошибки метод вернет false, а в свойстве LAST_ERROR объекта будет содержаться текст ошибки.

См. также

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

<?
$el = new CIBlockElement;

$PROP = array();
$PROP[12] = "Белый"; // свойству с кодом 12 присваиваем значение "Белый"
$PROP[3] = 38; // свойству с кодом 3 присваиваем значение 38

$arLoadProductArray = Array(
"MODIFIED_BY" => $USER->GetID(), // элемент изменен текущим пользователем
"IBLOCK_SECTION" => false, // элемент лежит в корне раздела
"PROPERTY_VALUES"=> $PROP,
"NAME" => "Элемент",
"ACTIVE" => "Y", // активен
"PREVIEW_TEXT" => "текст для списка элементов",
"DETAIL_TEXT" => "текст для детального просмотра",
"DETAIL_PICTURE" => CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"]."/image.gif")
);

$PRODUCT_ID = 2; // изменяем элемент с кодом (ID) 2
$res = $el->Update($PRODUCT_ID, $arLoadProductArray);
?>

Менять параметр IBLOCK ID нельзя.

Пользовательские комментарии

Пользовательские комментарии не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Добавлять комментарии могут только зарегистрированные пользователи. Сообщения для просмотра появляются после модерации.
1
Владимир Кулаев
Прошу учесть, что в примере нет кода задания нового значения дополнительного свойства, если оно является:

1.1. Для типа HTML/TEXT, при вставке HTML-кода и автоматическом подключении HTML-редактора.
$PROP[tables] = array("VALUE" => array("TYPE" =>"HTML","TEXT" => $matches[0]));

1.2. Для типа HTML/TEXT, при вставке plain text.
$PROP[tables] = array("VALUE" => array("TYPE" =>"TEXT","TEXT" => $matches[0]));

Со ссылки
http://dev.1c-bitrix.ru/community/forums/messages/forum7/topic14743/message81915/#message81915
2. $PROP = array(
["POSTS"] => array("19","20"), // привязка к элементу, множественное

["LANGUAGES"] => array(array("VALUE"=>"Английский","DESCRIPTION"]=>"базовые знания"), array("VALUE"=>"Немецкий","DESCRIPTION"]=>"базовые знания")),
// строка с описанием, множественное
1
Андрей Рыжкин
Включение HTML режима для detail_text и preview_text:

Код
$text = '<b>simple_text</b>'; // simple_text 
$text_type = 'html'; // text
"PREVIEW_TEXT"      => $text, 
"PREVIEW_TEXT_TYPE"     => $text_type, 
"DETAIL_TEXT"       => $text, 
"DETAIL_TEXT_TYPE"     => $text_type,
0
Evgeniy Kobzar
Рассмотрим задачу удаления одного из значений множественного свойства элемента инфоблока
Код
$el = new CIBlockElement;
$PROP = array();
$PROP[property_id][id] = "4";  
$PROP[property_id][id] = "5";
$PROP[property_id][id] = "6";

$arLoadProductArray = Array(
  "IBLOCK_ID"      => $B_ID,
  "PROPERTY_VALUES"=> $PROP,
  "NAME"           => "Element",
  );

$PRODUCT_ID = $E_ID;
$res = $el->Update($PRODUCT_ID, $arLoadProductArray);


При этом для удаления достаточно исключить из массива $PROP пару ключ, значение удаляемого свойства.
Данное решение является оптимальным в ситуации, когда необходимо сохранить
Код
$PROP[property_id ][id ]

id значения свойства прежним.

Также вариантом решения задачи может стать использования вызова
Код
CIBlockElement::SetPropertyValues($ELEMENT_ID, $IBLOCK_ID, $PROPERTY_VALUE, $PROPERTY_CODE);

в четвёртый параметр функции передавать false, а в третий передавать массив "код св-ва"=>"значение". При этом все значения будут удалены кроме тех, которые указанны в массиве, переданный в третий параметр.
Документация по данной функции предложена на странице http://dev.1c-bitrix.ru/api_help/iblock/classes/ciblockelement/setpropertyvalues.php
© «Битрикс», 2001-2012, «1C-Битрикс», 2012