Bitrix.Скрипты миграций: добавление свойств к инфоблоку
//<?php
/**
* Добавление свойств к инфоблоку.
* в массиве $arProperties нужно описать список свойств
* @doc http://dev.1c-bitrix.ru/api_help/iblock/classes/ciblockproperty/add.php документация по добавлению свойств
* @doc http://dev.1c-bitrix.ru/api_help/iblock/fields.php#fproperty документация по списку свойств доп. поля
*/
/** @var CMain $APPLICATION */
global $APPLICATION;
$errors = array();
$info = array();
if(\Bitrix\Main\Loader::includeModule('iblock')){
$arProperties = array(
array(
'NAME' => 'Величина скидки на аренду, в процентах',
'ACTIVE' => 'Y',
'SORT' => 500,
'CODE' => 'RENT_SALE_PERCENT',
'IBLOCK_ID' => 1,
'PROPERTY_TYPE' => 'N', // Тип свойства. Возможные значения: S - строка, N - число, F - файл, L - список, E - привязка к элементам, G - привязка к группам.
),
);
foreach ($arProperties as $arProperty) {
$resProperty = CIBlockProperty::GetList(
array(),
array('CODE' => $arProperty['CODE'], 'IBLOCK_ID' => $arProperty['IBLOCK_ID'])
);
while($arHasProperty = $resProperty->Fetch()){
$errors[] = sprintf("Ошибка: [2] Свойство c кодом %s уже существует.<br>\nИнформация по свойству: <pre>%s</pre>", $arProperty['CODE'], var_export($arHasProperty, true));
}
if(!empty($errors)) continue;
$ibp = new CIBlockProperty;
if(($propID = $ibp->Add($arProperty))){
$info[] = sprintf('Информация: Свойство «%s» [%d] успешно добавлено', $arProperty['NAME'], $propID);
}else{
if(($ex = $APPLICATION->GetException())){
$errors[] = sprintf('Ошибка: [3] %s', $ex->GetString());
}
if(isset($ibp->LAST_ERROR)){
$errors[] = sprintf('Ошибка: [4] %s', $ibp->LAST_ERROR);
}
}
}
}else{
$errors[] = 'Ошибка: [1] Модуль информационных блоков не подключен';
}
echo implode("<br>\n", $errors);
echo implode("<br>\n", $info);