Документация для разработчиков
Темная тема

SetPropertyValuesEx

Описание и параметры

CIBlockElement::SetPropertyValuesEx(
   int ELEMENT_ID,
   int IBLOCK_ID,
   array PROPERTY_VALUES,
   array FLAGS = array()
);

Метод сохраняет значения всех свойств элемента информационного блока. В отличие от SetPropertyValues может не содержать полный набор значений. Значения свойств, неуказанных в массиве PROPERTY_VALUES, будут сохранены. Этот метод более экономен в количестве запросов к БД. Метод статический.

Метод возвращает Null.

Если необходимо сохранить пустое значение для множественного свойства, то используйте значение false, так как просто пустой массив не сохранится.

Параметры вызова

ПараметрОписание
ELEMENT_ID Код элемента, значения свойств которого необходимо установить.
IBLOCK_ID Код информационного блока. Может быть не указан. В этом случае будет прочитан из базы данных по коду элемента.
PROPERTY_VALUES Массив значений свойств, в котором коду свойства ставится в соответствие значение свойства.
Должен быть вида Array("код свойства1"=>"значения свойства1", ....), где "код свойства" - числовой или символьный код свойства, "значения свойства" - одно или массив всех значений свойства (множественное).

Примечания:
  • При добавлении значений свойств типа "Файл" поле DESCRIPTION обязательно.
  • Если передаётся массив "свойство"=>"значение", то в качестве значения свойств типа "справочник" нужно указывать внешний код элемента справочника.

  • Для свойства типа Список следует передавать идентификатор значения свойства, а не значение.
  • для свойства типа Привязка к файлу на сервере, нужно передавать путь к файлу от корня сайта.
FLAGS Необязательный параметр предоставляет информацию для оптимизации выполнения. Может содержать следующие ключи:
  • NewElement - можно указать если заведомо известно, что значений свойств у данного элемента нет. Экономит один запрос к БД.
  • DoNotValidateLists - для свойств типа "список" отключает проверку наличия значений в метаданных свойства.

Смотрите также

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

Пример 1:

<?
$ELEMENT_ID = 18; // код элемента
$PROPERTY_CODE = "PROP1"; // код свойства
$PROPERTY_VALUE = "Синий"; // значение свойства

// Установим новое значение для данного свойства данного элемента
CIBlockElement::SetPropertyValuesEx($ELEMENT_ID, false, array($PROPERTY_CODE => $PROPERTY_VALUE));

?>

Пример 2 (изменение немножественного свойства типа HTML/Text):

$el_id = 125;
$iblock_id = 45;
$prop[$prop_code] = array('VALUE'=>array('TYPE'=>'HTML', 'TEXT'=>$prop_value));
CIBlockElement::SetPropertyValuesEx($el_id, $iblock_id, $prop);

Пример 3:

<input name="MyFile1" type="file" />
<input name="MyFile2" type="file" />

function makeCurentFilesArray($InputFileCode) {
   unset($arFiles, $TMPFILE);
   $arFiles = array();  // Массив всех файлов в свойстве []
   $TMPFILE = array(); // Временный массив для текщего файла
   if(is_array($_FILES[$InputFileCode])) {
      foreach($_FILES[$InputFileCode]['tmp_name'] as $key => $val) {
         if(file_exists($val)) { 
            foreach($_FILES[$InputFileCode] as $namekey => $nameval) {
               $TMPFILE[$namekey] = $nameval[$key];
            }
         $arFiles[] = array('VALUE' => $TMPFILE, 'DESCRIPTION' => $TMPFILE['name']); 
         }
      } 
   } 
   return $arFiles;
}

if (!empty($_FILES['MyFile1'])) $PropFileArr['MyFile1'] = makeCurentFilesArray('MyFile1');   
if (!empty($_FILES['MyFile2'])) $PropFileArr['MyFile2'] = makeCurentFilesArray('MyFile2');
                       
CIBlockElement::SetPropertyValuesEx($Element_ID, $IBlock_ID, $PropFileArr); // Обновляем массив свойств типа файл


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

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

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

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
Страницы: Пред. 1 2
4
Родион Абдурахимов
Код
$PROPERTY_VALUE = array(
  0 => array("VALUE"=>"значение","DESCRIPTION"=>"описание значения"),
  1 => array("VALUE"=>"значение2","DESCRIPTION"=>"описание значения2") 
);
CIBlockElement::SetPropertyValuesEx($ELEMENT_ID, $IBLOCK_ID, array($PROPERTY_CODE => $PROPERTY_VALUE));
При добавлении множественного свойства с полем описания важно сохранять порядок ключей VALUE и DESCRIPTION.
Если в строке
Код
0 => array("VALUE"=>"значение","DESCRIPTION"=>"описание значения"),
поменять местами VALUE и DESCRIPTION - добавление свойства не произойдет
2
Дмитрий Ипатов
Для того чтобы записать множественное свойство привязка к разделом нужно передать массив с айди разделов, пример:

Код
$section_list = array();

while ($arOtrasliItem = $rsOtrasliItem->Fetch())                  
{                  
   $db_sec = CIBlockSection::GetList(array(), 
      array(
         "IBLOCK_ID" => IBLOCK_OTRASLI,
         "XML_ID" => $arOtrasliItem['VALUE']
      ),
      false,
      array('IBLOCK_ID', 'ID')
   );      

   if($ar_sec = $db_sec->Fetch())
      $section_list[] = $ar_sec['ID'];                                       
}

if(!empty($section_list))
{
   $props['OTRASLI'] = $section_list;               
   CIBlockElement::SetPropertyValuesEx($elid, IBLOCK_CATALOG, $props);               
}
Страницы: Пред. 1 2
© «Битрикс», 2001-2021, «1С-Битрикс», 2021
Наверх