worksolutions / bitrix-reduce-migrations

Bitrix module for migrations
https://worksolutions.ru
MIT License
87 stars 15 forks source link

ID инфоблоков #17

Closed saundefined closed 5 years ago

saundefined commented 6 years ago

Отличный модуль, но есть вопрос по использованию:

На dev-площадке с помощью IblockBuilder создается инфоблок, при переносе и запуске миграций на продакшене, ID инфоблоков могут отличаться

Для использования в коде мне нужен ID созданного инфоблока. На dev он один, на проде - другой :(

как вы решаете проблему такого рассинхрона?

sokolovsky commented 6 years ago

Символьными кодами инфоблоков, с идентификаторами не работаем в коде напрямую. Но не все компоненты работают с символьным кодом. Тогда используем заготовку которая кеширует для кода инфоблока его идентификатор, так как кеш является атрибутом конкретной площадки идентификаторы всегда актуальные.

garr1nch4 commented 5 years ago

В модуле появился функционал позволяющий обновлять инфоблок по коду и по имени.

Пример обновления по коду:

$builder = new \WS\ReduceMigrations\Builder\IblockBuilder();
$builder->updateIblockByPointer(
    \WS\ReduceMigrations\Builder\IblockPointer::byCode(DOMAIN_IBLOCK_NEWS),
    function (\WS\ReduceMigrations\Builder\Entity\Iblock $iblock) {
        $prop = $iblock->addProperty('Тип')
            ->code('type')
            ->typeDropdown();

        $prop->addEnum('Главная новость')->xmlId('main');
        $prop->addEnum('Срочная новость')->xmlId('hot');
        $prop->addEnum('Эксклюзив')->xmlId('exclusive');
    }
);