Korusol
8/29/2016 - 7:22 PM

Bitrix.Скрипты миграций: добавление свойств к инфоблоку

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);