В процессе разработки довольно часто приходится программно обновлять значения свойств элементов инфоблока. Под катом небольшая шпаргалка по api-функциям для решения этой задачи и форматам передаваемых в них данных.
Api-функции
Обновлять свойства можно с помощью 4 функций:
CIBlockElement::Update — обновление полей и свойств элемента
CIBlockElement::SetPropertyValueCode — обновление одного свойства
CIBlockElement::SetPropertyValues — обновление одного или всех свойств
CIBlockElement::SetPropertyValuesEx — обновление произвольного количества свойств элемента
Для большинства случаев самой удобной является функция SetPropertyValuesEx. Именно ее я и буду использовать в качестве примера, описывая формат $value для одиночных, множественных и свойств с описанием.
CIBlockElement::SetPropertyValuesEx($elementID, $iblockID, array($PROPERTY_CODE => $value));
Строка, привязка к файлу на сервере
Для свойства «Привязка к файлу на сервере» в качестве значения передается путь от корня сайта, существование файла не проверяется.
$value = "Строка"; $value = array("Строка", "Строка 2"); $value = array( array("VALUE"=>"Строка", "DESCRIPTION"=>"Описание строки"), array("VALUE"=>"Строка 2", "DESCRIPTION"=>"Описание строки 2") );
Число, привязка к элементам, привязка к разделам, привязка к пользователю
При обновлении свойства типа «Число» не проверяется значение и записать можно любую строку. Для остальных типов передается id соответсвующего объекта и проверяется его существование.
$value = 1; $value = array(1, 2); $value = array( array("VALUE"=>1, "DESCRIPTION"=>"Описание"), array("VALUE"=>2, "DESCRIPTION"=>"Описание 2") );
Список
В качестве значения необходимо передавать id варианта списка. Корректность данных проверяется, если не установлен параметр DoNotValidateLists при вызове функции.
$value = 1; $value = array(1, 2);
Дата
Дату нужно передавать в формате «dd.mm.yyyy hh:mm:ss». Валидации данных нет и запишется любая строка, но при попытке сохранить элемент через админку произойдет ошибка «Неверный формат Даты/Времени».
$value = "01.01.2013 00:00:01"; $value = array("01.01.2013 00:00:01", "31.12.2013 23:59:59"); $value = array( array("VALUE"=>"01.01.2013 00:00:01", "DESCRIPTION"=>"Описание"), array("VALUE"=>"31.12.2013 23:59:59", "DESCRIPTION"=>"Описание 2") );
HTML\text
В массиве обязательно должен содержаться элемент с ключом «TYPE» и значением
$value = array('VALUE'=>array('TYPE'=>'html', 'TEXT'=>"Строка")); $value = array( array('VALUE'=>array('TYPE'=>'text', 'TEXT'=>"Строка")), array('VALUE'=>array('TYPE'=>'text', 'TEXT'=>"Строка 2")) ); $value = array( array('VALUE'=>array('TYPE'=>'text', 'TEXT'=>"Строка"), "DESCRIPTION"=>"Описание строки"), array('VALUE'=>array('TYPE'=>'text', 'TEXT'=>"Строка 2"), "DESCRIPTION"=>"Описание строки 2") );
Файл
При множественном значении нужно заполнять DESCRIPTION, в случае одиночного можно не передавать.
$value = array("VALUE" => CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"]."/upload/file.avi")); $value = array( array("VALUE" => CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"]."/upload/file.avi"),"DESCRIPTION"=>"Описание файла"), array("VALUE" => CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"]."/upload/file.flv"),"DESCRIPTION"=>"Описание файла 2"), );
Привязка к карте Google Maps, привязка к Яндекс.Карте
Значением являются координаты точки через запятую.
$value = "55.7539022426,37.6208299398"; $value = array("55.7539022426,37.6208299398", "55.7638691089,37.592124939"); $value = array( array("VALUE"=>"55.7539022426,37.6208299398", "DESCRIPTION"=>"Описание точки"), array("VALUE"=>"55.7638691089,37.592124939", "DESCRIPTION"=>"Описание точки 2") );
Видео
По состоянию на 14.04.2013 с последними бета-обновлениями функция SetPropertyValuesEx не обновляет свойства этого типа из-за ошибки в ядре. Используйте SetPropertyValues.
$value = array( "VALUE" => array( "PATH" => "/upload/file.flv", "WIDTH" => 400, "HEIGHT" => 300, "TITLE" => "Заголовок видео", "DURATION" => "00:30", "AUTHOR" => "Автор видео", "DATE" => "01.02.2011", "DESC" => "Описание видео" ) );