Как стать автором
Поиск
Написать публикацию
Обновить

Установка инфоблоков в мастере установки модуля 1С-Битрикс

Сегодняшний выходной был омрачен досадной неприятностью. Стояла задача сделать сборку модуля для 1С-Битрикс Маркетплейс, в котором нужно заодно установить инфоблоки. Для тех кто в курсе, что такое Bitrix Framework — те в принципе понимают, что сделать это можно и с помощью API битрикса, но если в инфоблоке порядка 50 свойств, а таких инфоблоков несколько (и они уже созданы на тестовом сайте вручную) — то такой код может вырасти до невероятных размеров, и он обязательно подкинет рутины разработчику.

Немного покопавшись в интернете (и, само собой, в документации) нашел код установки инфоблоков из XML-файлов (в которые можно выгрузить любой инфоблок стандартными средствами):

WizardServices::ImportIBlockFromXML


Вроде бы уже порадовался, что нашел простое и элегантное решение. Но не тут-то было. Как выяснилось в дальнейшем, WizardServices относится к механизму мастеров установки и настройки решений, которые на уровне платформы в общем-то никакого отношения не имеют к модулям (которые, собственно и отправляются в маркетплейс). То есть из инстяллаторя модуля WizardServices просто фактически недоступен, вместе с функцией загрузки инфоблока из XML-файла.


Погуглив еще немного, нашел в документации к модулю инфоблоков функцию ImportXMLFile. Что символично, в документации заголовок страницы по импорту инфоблоков начинается с заголовка: «CIBlockCMLImport — класс для работы с ...», продолжается пустой страницей и парой пользовательских комментариев с предложением использовать ImportXMLFile.

Ну, думаю, вот оно решение. Использовал данную функцию и уже порадовался было, что проект готов. Но не тут-то было. Как оказалось, При импорте инфоблока ImportXMLFile анализирует инфоблоки по идентификатору. То есть если на сайте, куда таким образом будет устанавливаться решение с подобным XML уже есть инфоблок с соответвующим ИД — то импорт совместит новые данные со старыми.

В итоге последующих двухчасовых проб и ошибок решение было найдено.

//Подключаем механизм создания мастеров (лучше в самом начале файла установки модуля)
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/classes/general/wizard.php");
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/install/wizard_sol/utils.php");

WizardServices::ImportIBlockFromXML($filename, $iblock_code, $iblock_type, SITE_ID);


В процессе моих поисков были прочитаны все официальные источники. И документация битрикс, и обучающие курсы, и формумы с блогами. Нигде более удачного решения (или вообще хотя бы какого-то решения) я не нашел. А потому и решил этим решением поделиться.
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.