Скрипты миграций для 1С-Битрикс. Добавление свойств к инфоблоку
При схеме разработки в, как минимум, 2 копии (dev и production) возникает потребность переноса изменений базы данных из одной копии в другую. На текущий момент (пока не решили вопрос с миграциями) мы пишем код на API 1С-Битрикс, который можно запустить в PHP-командной строке битрикса и изменения появятся в нужной копии. Примеры этого кода я и буду размещать у себя в блоге. Начну с добавления свойств к инфоблоку.
Хочу заменить, что данная миграция не обновляет уже существующие свойства, а любезно скажет разработчику, что свойство уже есть.
Вам остаётся только собрать нужной структуры массив $arProperties и выполнить миграцию.
Код миграции
//<?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);
Список миграций доступен по тегу Миграции для 1С-Битрикс
2 комментария
Я просто положу это здесь: http://bitrix.expert/tekhnologii/migratsii-dannykh-v-bitriks/
Игорь, из вашей статьи могу прокомментировать только про модуль «ребят». Я знаю о нём. Это что-то похожее на правду. Он у нас первый в очереди на роль мигратора. Но в любом случае, для миграций и нужны «куски» кода, которые и будут мигрировать данные.