Обновление свойств инфоблока

В процессе разработки довольно часто приходится программно обновлять значения свойств элементов инфоблока. Под катом небольшая шпаргалка по 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» и значением html\text.

$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" => "Описание видео"
			)
		);

php

Если вам понравилась статья, подписывайтесь на обновления блога по rss или присоединяйтесь в twitter

Поделиться ссылкой с друзьями:

Метки: ,

Категории: Bitrix

Комментарии (1)

  1. Londeren:

    Для множественного поля типа Файл без описания:

    $ELEMENT['MORE_PHOTO'] = array(
    CFile::MakeFileArray(…);
    );

    То есть не надо VALUE писать