Appearance
Модуль для работы с миграциями. realweb.api.migration
Совместимость
realweb.api v.6
Создание миграций
- через интерфейс в административной части: Настройки -> Realweb Migration -> Новый сценарий обновления (
/bitrix/admin/rw_migration.php?lang=ru&q=create) - через терминал:
shell
php bitrix/tools/migrate create -n=<name> -p=<priority> -t=<time>Новые миграции создаются в директории local/php_interface/migrations/
Выполнение миграций
- через интерфейс в административной части: Настройки -> Realweb Migration -> Обновление (
/bitrix/admin/rw_migration.php?lang=ru&q=main) - через терминал:
shell
php bitrix/tools/migrate apply -fПримеры миграций
Базовый класс миграции
php
<?php
// @codingStandardsIgnoreLine
use Realweb\Api\Module\Site\Model\Helper;
class rw_m_1700199194_develop_update_iblocks extends \Realweb\Api\Module\Migration\Model\Scenario\Script
{
public static function name(): string
{
return 'update_iblocks';
}
// @codingStandardsIgnoreLine
public static function hash(): string
{
return '3efa676df204cf4a050f6e2a54b00108b8b78546';
}
public static function priority(): string
{
return self::PRIORITY_HIGH;
}
public static function approximatelyTime(): int
{
return 1;
}
public function commit(): void
{
}
public function rollback(): void
{
}
}Название миграции rw_m_1700199194_develop_update_iblocks включает префикс, временную метку, текущую ветку git и название миграции. В функции commit пишется код выполняймый в миграции, в rollback пишется код для отката миграции.
Сохранение типа инфоблока
php
$obIblockType = (new \Realweb\Api\Module\Migration\Model\Builder\Iblock\Type())
->save('content', function (\Realweb\Api\Module\Migration\Model\Entity\Iblock\Type $obEntity) {
$obEntity
->sort(100)
->sections()
->langRu('Контент')
->langEn('Content');
});Сохранение инфоблока
php
$obIblock = (new \Realweb\Api\Module\Migration\Model\Builder\Iblock())
->save('content', 'content', function (\Realweb\Api\Module\Migration\Model\Entity\Iblock $rsIblock) {
$rsIblock
->name('Контент')
->listPageUrl("#SITE_DIR#/")
->sectionPageUrl("#SITE_DIR#/#SECTION_CODE_PATH#/")
->detailPageUrl("#SITE_DIR#/#SECTION_CODE_PATH#/#ELEMENT_CODE#/")
->requiredCode()
->requiredSectionCode()
->textHtml()
->setIpropertyTemplates('{=this.Name}');
/***PROPERTIES****/
$rsIblock
->saveProperty('LINK')
->name('Ссылка')
->required()
->typeString();
$rsIblock
->saveProperty('COUNT')
->name('Количество')
->index()
->required()
->typeNumber();
$obProp = $rsIblock
->saveProperty('TYPE')
->name('Тип')
->required()
->typeDropdown();
$obProp->saveEnum('По умолчанию')->xmlId('default');
$obProp->saveEnum('Оплата')->xmlId('payment');
$obProp->saveEnum('Доставка')->xmlId('delivery');
/***SECTION-FIELDS****/
$rsIblock->saveSectionField('LINK')
->label('Ссылка')
->typeString();
$rsIblock->saveSectionField('COUNT')
->label('Количество')
->index()
->typeInt();
$obField = $rsIblock->saveSectionField('TYPE')
->label('Тип')
->typeEnum();
$obField->saveEnum('По умолчанию')->xmlId('default');
$obField->saveEnum('Оплата')->xmlId('payment');
$obField->saveEnum('Доставка')->xmlId('delivery');
/***IBLOCK-FIELDS****/
$rsIblock->saveIblockField('LINK')
->label('Ссылка')
->typeString();
$rsIblock->saveIblockField('COUNT')
->label('Количество')
->index()
->typeInt();
$obField = $rsIblock->saveIblockField('TYPE')
->label('Тип')
->typeEnum();
$obField->saveEnum('По умолчанию')->xmlId('default');
$obField->saveEnum('Оплата')->xmlId('payment');
$obField->saveEnum('Доставка')->xmlId('delivery');
/***ELEMENT-INTERFACE***/
$rsIblock->saveElementFormInterface(0)
->setTabs(
(new \Realweb\Api\Module\Migration\Model\Entity\Option\Tab\Collection())
->addItem(
(new \Realweb\Api\Module\Migration\Model\Entity\Option\Tab\Entity('Элемент'))
->addItem('ID')
->addItem('NAME')
->addItem('CODE', 'Код')
->addItem('PROPERTY_TYPE')
->addItem('PROPERTY_COUNT')
->addItem('PROPERTY_LINK', 'Ссылка')
)
->addItem(
(new \Realweb\Api\Module\Migration\Model\Entity\Option\Tab\Entity('Анонс'))
->addItem('PREVIEW_PICTURE', 'Картинка')
->addItem('PREVIEW_TEXT')
)
);
/***SECTION-INTERFACE***/
$rsIblock->saveSectionFormInterface(0)
->setTabs(
(new \Realweb\Api\Module\Migration\Model\Entity\Option\Tab\Collection())
->addItem(
(new \Realweb\Api\Module\Migration\Model\Entity\Option\Tab\Entity('Элемент'))
->addItem('ID')
->addItem('NAME')
->addItem('CODE', 'Код')
->addItem('UF_TYPE')
->addItem('UF_COUNT')
->addItem('UF_LINK')
)
->addItem(
(new \Realweb\Api\Module\Migration\Model\Entity\Option\Tab\Entity('Анонс'))
->addItem('PICTURE', 'Картинка')
->addItem('DESCRIPTION')
)
);
});Сохранение HighLoadBlock
php
$hlBuilder = (new \Realweb\Api\Module\Migration\Model\Builder\HighLoadBlock())
->save("Content", "realweb_hb_content", function (\Realweb\Api\Module\Migration\Model\Entity\HighLoadBlock $hlBlock) {
$hlBlock
->saveField("NAME")
->typeString()
->label('Название')
->required();
$hlBlock
->saveField("UF_XML_ID")
->typeString()
->label('Внешний код')
->required();
$hlBlock->saveField("UF_SORT")
->typeInt()
->label('Сортировка');
});Сохранение пользовательского свойства
php
$fieldBuilder = (new \Realweb\Api\Module\Migration\Model\Builder\Field())
->save("COUNT", "USER", function (\Realweb\Api\Module\Migration\Model\Entity\Field $field) {
$field
->typeInt()
->label('Количество');
});Каталог (Catalog)
Сохранение типа цен
php
(new \Realweb\Api\Module\Migration\Model\Builder\Catalog\Price())
->save("BASE", function (Realweb\Api\Module\Migration\Model\Entity\Catalog\Price $obPrice): void {
$obPrice
->base('N') // по умолчанию
->userGroup(array(2)) // по умолчанию
->userGroupBuy(array(2)) // по умолчанию
->sort(100)// по умолчанию
->xmlId('BASE')
->label('Базовая');
});Сохранение склада
php
(new \Realweb\Api\Module\Migration\Model\Builder\Catalog\Store())
->save("SPB", function (Realweb\Api\Module\Migration\Model\Entity\Catalog\Store $obPrice): void {
$obPrice
->isDefault('N') // по умолчанию
->siteId('s1') // по умолчанию
->shippingCenter('Y') // по умолчанию
->issuingCenter('Y') // по умолчанию
->active('Y') // по умолчанию
->sort(100) // по умолчанию
->xmlId('SPB')
->title('Санкт-Петербург')
->address('Невский пр-т 1')
->email('test@test.test')
->phone('79991112233')
->schedule('9:00 - 21:00')
->gpsS(50)
->gpsN(50)
->description('test');
});Интернет магазин (Sale)
Сохранение типа пользователя
php
(new \Realweb\Api\Module\Migration\Model\Builder\Sale\PersonType())
->save("INDIVIDUAL", function (Realweb\Api\Module\Migration\Model\Entity\Sale\PersonType $obPersonType): void {
$obPersonType
->lid('s1') // по умолчанию
->entityRegistryType('ORDER') // по умолчанию
->businessDomain('I') // по умолчанию
->active('Y') // по умолчанию
->sort(100) // по умолчанию
->xmlId('INDIVIDUAL')
->name('Физ лицо');
});Сохранение группы свойств
php
(new \Realweb\Api\Module\Migration\Model\Builder\Sale\PropertyGroup())
->save("ADDRESS", "INDIVIDUAL", function (Realweb\Api\Module\Migration\Model\Entity\Sale\PropertyGroup $obPropertyGroup): void {
$obPropertyGroup
->sort(100) // по умолчанию
->name('Адрес');
});Сохранение свойств
php
(new \Realweb\Api\Module\Migration\Model\Builder\Sale\Property())
->save("NAME", "ADDRESS", "INDIVIDUAL", function (Realweb\Api\Module\Migration\Model\Entity\Sale\Property $obProperty): void {
$obProperty
->sort(100)
->name('ФИО')
->typeName()
->setRequired();
});
(new \Realweb\Api\Module\Migration\Model\Builder\Sale\Property())
->save("PHONE", "ADDRESS", "INDIVIDUAL", function (Realweb\Api\Module\Migration\Model\Entity\Sale\Property $obProperty): void {
$obProperty
->sort(200)
->name('Телефон')
->typePhone()
->setRequired();
});
(new \Realweb\Api\Module\Migration\Model\Builder\Sale\Property())
->save("EMAIL", "ADDRESS", "INDIVIDUAL", function (Realweb\Api\Module\Migration\Model\Entity\Sale\Property $obProperty): void {
$obProperty
->sort(300)
->name('Email')
->typeEmail()
->setRequired();
});
(new \Realweb\Api\Module\Migration\Model\Builder\Sale\Property())
->save("STREET", "ADDRESS", "INDIVIDUAL", function (Realweb\Api\Module\Migration\Model\Entity\Sale\Property $obProperty): void {
$obProperty
->sort(400)
->name('Улица')
->typeString();
});
(new \Realweb\Api\Module\Migration\Model\Builder\Sale\Property())
->save("IS_INTERNAL", "ADDRESS", "INDIVIDUAL", function (Realweb\Api\Module\Migration\Model\Entity\Sale\Property $obProperty): void {
$obProperty
->sort(999)
->name('Внутренний заказ')
->typeCheckbox()
->setService();
});
(new \Realweb\Api\Module\Migration\Model\Builder\Sale\Property())
->save("TYPE", "ADDRESS", "INDIVIDUAL", function (Realweb\Api\Module\Migration\Model\Entity\Sale\Property $obProperty): void {
$obSaleProperty = $obProperty
->sort(500)
->name('Тип заказа')
->typeEnum();
$obSaleProperty
->saveEnum('fast-order')
->name('Быстрый заказ')
->sort(10)
->xmlId('fast-order')
->description('Быстрый заказ');
$obSaleProperty
->saveEnum('slow-order')
->name('Медленный заказ')
->sort(20)
->xmlId('slow-order')
->description('Медленный заказ');
});Сохранение статусов
php
(new \Realweb\Api\Module\Migration\Model\Builder\Sale\Status())
->save("PO", function (Realweb\Api\Module\Migration\Model\Entity\Sale\Status $obStatus): void {
$obStatus
->typeOrder()
->lang('Название', 'Описание')
->sort(100)
->xmlId('PO')
->notify('Y');
});
(new \Realweb\Api\Module\Migration\Model\Builder\Sale\Status())
->save("PD", function (Realweb\Api\Module\Migration\Model\Entity\Sale\Status $obStatus): void {
$obStatus
->typeDelivery()
->lang('Название', 'Описание')
->sort(100)
->xmlId('PD')
->notify('Y');
});Шаблоны миграций
Шаблон миграций можно выбрать двумя способами:
- через поле выбора в админинке
- по названию миграции
Создание ИБ
Примеры названий:
create_ib_content_newscreate_iblock_content_newscreate_ib_1c-catalog_product-offers
Пример
php
(new \Realweb\Api\Module\Migration\Model\Builder\Iblock())
->save('content', 'news', function (\Realweb\Api\Module\Migration\Model\Entity\Iblock $rsIblock) {
$rsIblock
->name("")
->listPageUrl("#SITE_DIR#/")
->sectionPageUrl("#SITE_DIR#/#SECTION_CODE_PATH#/")
->detailPageUrl("#SITE_DIR#/#SECTION_CODE_PATH#/#ELEMENT_CODE#/")
->requiredCode()
->requiredSectionCode()
->textHtml()
->setIpropertyTemplates();
$rsIblock
->saveProperty("")
->name("")
->type("");
$rsIblock
->saveSectionField("")
->label("")
->type("");
$rsIblock
->saveIblockField("")
->label("")
->type("");
$rsIblock->saveElementFormInterface(0)
->setTabs(
(new \Realweb\Api\Module\Migration\Model\Entity\Option\Tab\Collection())
->addItem(
(new \Realweb\Api\Module\Migration\Model\Entity\Option\Tab\Entity('Элемент'))
->addItem('ID')
->addItem('NAME')
->addItem('CODE')
->addItem('PREVIEW_PICTURE')
)
);
$rsIblock->saveSectionFormInterface(0)
->setTabs(
(new \Realweb\Api\Module\Migration\Model\Entity\Option\Tab\Collection())
->addItem(
(new \Realweb\Api\Module\Migration\Model\Entity\Option\Tab\Entity('Элемент'))
->addItem('ID')
->addItem('NAME')
->addItem('CODE', 'Код')
->addItem('UF_TYPE')
->addItem('UF_COUNT')
->addItem('UF_LINK')
)
);
});Обновление ИБ
Примеры названий:
update_ib_content_newsupdate_iblock_content_newsupdate_ib_1c-catalog_product-offers
Пример
php
(new \Realweb\Api\Module\Migration\Model\Builder\Iblock())
->save('content', 'news', function (\Realweb\Api\Module\Migration\Model\Entity\Iblock $rsIblock) {
});Создание ХБ
Примеры названий:
create_hb_user_phonescreate_highload_user_phonescreate_highloadblock_user-phones
Пример
php
(new \Realweb\Api\Module\Migration\Model\Builder\HighLoadBlock())
->save("UserPhones", "realweb_hb_user_phones", function (\Realweb\Api\Module\Migration\Model\Entity\HighLoadBlock $hlBlock) {
$hlBlock
->saveField("")
->type("")
->label("");
});Обновление ХБ
Примеры названий:
update_hb_user_phonesupdate_highload_user_phonesupdate_highloadblock_user-phones
Пример
php
(new \Realweb\Api\Module\Migration\Model\Builder\HighLoadBlock())
->save("UserPhones", "realweb_hb_user_phones", function (\Realweb\Api\Module\Migration\Model\Entity\HighLoadBlock $hlBlock) {
});Создание поля
Примеры названий:
create_field_user_phonecreate_field_crm-lead_phone-number
Пример
php
(new \Realweb\Api\Module\Migration\Model\Builder\Field())
->save("USER", "PHONE", function (\Realweb\Api\Module\Migration\Model\Entity\Field $field) {
$field
->type('')
->label('');
});Обновление поля
Примеры названий:
update_field_user_phoneupdate_field_crm-lead_phone-number
Пример
php
(new \Realweb\Api\Module\Migration\Model\Builder\Field())
->save("USER", "PHONE", function (\Realweb\Api\Module\Migration\Model\Entity\Field $field) {
});