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

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

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

Интересные статьи

Интересные статьи

В первой части статьи тема превосходства VB.NET над C# по рейтингу TIOBE нашла живой отклик в комментариях. Поэтому по совету AngReload посмотрим на тренды StackOverflow. C# все еще силен! Рев...
Давным-давно, еще до моей работы в Америке (2+ года) и во Франции (3+ года) я с упоением читал воспоминания физика Гейзенберга. Одно место меня так поразило, что я пронес его через годы, и потом ...
В качестве небольшого любительского проекта я поэкспериментировал с нейросетями AI Gigapixel для апскейла одного из моих любимых научно-фантастических сериалов — Star Trek: Deep Space Nine (D...
Нам подвернулась возможность провести небольшое, но крайне интересное тактическое учение В процессе исследований нового МК от известной фирмы на основе архитектуры Cortex-М4 (я об этом обязатель...
Как обновить ядро 1С-Битрикс без единой секунды простоя и с гарантией работоспособности платформы? Если вы не можете закрыть сайт на техобслуживание, и не хотите экстренно разворачивать сайт из бэкапа...