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

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-2024, «1С-Битрикс», 2024