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

Update

bool CIBlockProperty::Update(
 int ID,
 array arFields
);

Метод изменяет параметры свойства с кодом ID. Перед изменением параметров вызываются обработчики события OnBeforeIBlockPropertyUpdate из которых можно отменить изменения или переопределить поля. А после изменения параметром вызывается событие OnAfterIBlockPropertyUpdate. Нестатический метод.

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

ПараметрОписание
ID ID изменяемой записи.
arFields Массив Array("поле"=>"значение", ...). Содержит значения всех полей изменяемого свойства. Кроме того, с помощью поля "VALUES", значением которого должен быть массив вида Array(Array("VALUE"=>"значение", "DEF"=>"по умолчанию (Y/N)", "SORT"=>"индекс сортировки"),...), можно установить варианты выбора для свойств типа "список" (подробнее смотрите метод CIBlockProperty::UpdateEnum()).

Примечание: без необходимости не передавайте в arFields параметр IBLOCK_ID. Если в arFields передается IBLOCK_ID и в инфоблоке включена поддержка свойств для разделов (и умный фильтр), то свойство отвяжется от верхнего раздела и снова привяжется к верхнему разделу.
$arFields = Array(
    "IBLOCK_ID"=>"1",
    "SORT" => 2,
);
$ibp = new CIBlockProperty;
if(!$ibp->Update($prop['ID'], $arFields))
    echo $ibp->LAST_ERROR; 
Код не только изменит индекс сортировки, но еще добавит привязку к верхнему разделу инфоблока.


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

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

См. также


Примечание: если используются Инфоблоки 2.0 и изменяется базовый тип свойства, то все текущие значения свойств у существующих элементов очищаются.


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

Пример 1:

<?
$arFields = Array(
  "NAME" => "Цвет",
  "ACTIVE" => "Y",
  "SORT" => "100",
  "CODE" => "color",
  "PROPERTY_TYPE" => "L",
  "IBLOCK_ID" => 11
  );

$arFields["VALUES"][0] = Array
  "VALUE" => "Красный",
  "DEF" => "N",
  "SORT" => "100"
  );

$arFields["VALUES"][1] = Array(
  "VALUE" => "Желтый",
  "DEF" => "N",
  "SORT" => "200"
  );

$arFields["VALUES"][2] = Array(
  "VALUE" => "Зеленый",
  "DEF" => "Y",
  "SORT" => "300"
  );

$ibp = new CIBlockProperty;
if(!$ibp->Update($ID, $arFields))
	echo $ibp->LAST_ERROR;
?>

Пример 2:

В случае обновления информации в пользовательском типе свойства для сохранения ключа USER_TYPE_SETTINGS необходимо указать еще ключ USER_TYPE с реальным значением. В противном случае ключ USER_TYPE_SETTINGS не обновится. Неверными будут следующие варианты:

$arFields = array(
   'PROPERTY_TYPE' => 'E',
   'USER_TYPE_SETTINGS' => array(
      'WIDTH' => '10',
      'HEIGHT' => '10',
   ),
);
$ibp = new CIBlockProperty();
$ibp->Update($ID, $arFields));
и
$arFields = array(
   'PROPERTY_TYPE' => 'E',
   'USER_TYPE_SETTINGS' => array(
      'WIDTH' => '10',
      'HEIGHT' => '10',
   ),
   'USER_TYPE' => '',
);
$ibp = new CIBlockProperty();
$ibp->Update($ID, $arFields));
Рабочий вариант:
$arFields = array(
   'PROPERTY_TYPE' => 'E',
   'USER_TYPE_SETTINGS' => array(
      'WIDTH' => '10',
      'HEIGHT' => '10',
   ),
   'USER_TYPE' => 'xxx'
);
$ibp = new CIBlockProperty();
$ibp->Update($ID, $arFields));

Пример 3:

//включить индексацию свойства для поиска
 $arFields = Array(
     'SEARCHABLE'=>'Y'
);
$ibp = new CIBlockProperty;
if(!$ibp->Update($prop['ID'], $arFields))
     echo $ibp->LAST_ERROR;

Пример 4:

// добавление свойства в умный фильтр: 
$arFields = Array('SMART_FILTER' => 'Y', 'IBLOCK_ID' => 123);
$ibp = new CIBlockProperty();
if(!$ibp->Update($prop['ID'], $arFields))
echo $ibp->LAST_ERROR; 

//IBLOCK_ID в arFields указывать обязательно, иначе свойство не будет включено в умный фильтр, и при этом не выдаст ошибки.
//Чтобы исключить свойство из умного фильтра в arFileds заменить:  'SMART_FILTER'=>'N'


© «Битрикс», 2001-2019, «1С-Битрикс», 2019
Наверх