Дата последнего изменения: 23.09.2021
Кроме модулей в Marketplace возможна реализация решений типовых сайтов партнеров.
Примерный порядок создания мастера установки решения:
/public
, шаблоны в папку /templates
. Основная логика установки должна быть описана в файле services/.services.php
. Массив $arServices
содержит описание последовательности запуска файлов из соответствующих подкаталогов services.На сами файлы никаких ограничений нет, можно, например, создать файл events.php для установки почтовых событий и написать в нем вызов API для их создания в случае, если они уже не были созданы.
В качестве примера можно рассмотреть уже готовые мастера установки решений, имеющиеся в дистрибутивах продуктов на Bitrix Framework. Например: Мастер создания интернет-магазина в «1C-Битрикс: Управление сайтом», расположенный в папке: /bitrix/wizards/bitrix/eshop
.
Особенности, которые необходимо учитывать:
В публичной части инсталлятора файл index.php должен именоваться как _index.php - иначе будет ошибка при инсталляции. Такого именования достаточно, что бы мастер автоматом в конце установки заменил текущий index.php на ваш.
Все файлы с кодировкозависимыми символами должны располагаться внутри папки ~/lang/[ru|en]/
и должны быть созданы в языковых сообщениях, когда это требуется. Система обновлений для партнерских модулей перекодирует все файлы, путь к которым содержит /lang/
. Например, для файла ./portal/site/services/.services.php
путь должен быть таким: ./portal/lang/[ru|en]/site/services/.services.php
. Для установщика сервиса (подключается автоматически) ./portal/site/services/папка_сервиса/установщик.php
путь такой: ./portal/site/services/папка_сервиса/lang/[ru|en]/установщик.php
.
При создании мастера важно также учитывать момент "переустановки сайта", когда пользователь будет запускать мастер повторно. Нужно разложить все сущности на те, которые следует переустановить (шаблоны, например) и те, которые следует сохранить (включаемые области, инфоблоки и т.д.)
В установочных скриптах необходимо проверять на существование создаваемую сущность. Если сущность уже установлена – пропускать установку. В установочных файлах можно делать return
. Пример:
<? if (!CModule::IncludeModule("iblock")) return; $typeResult = CIBlockType::GetByID("news"); if ($typeResult->Fetch()) //Установлен тип Новости? Пропускаем установку return; //Создание типа инфоблока ?>
Чтобы прописать ID инфоблоков в файлы публичной части, надо запускать после копирования файлов публички и установки инфоблока метод CWizardUtil::ReplaceMacros, где первый параметр - это путь к файлу, а второй - массив подстановок, например, чтобы заменить #NEWS_IBLOCK_ID# на число, нужно сделать так:
CWizardUtil::ReplaceMacros(WIZARD_SITE_PATH."/news/index.php", array("NEWS_IBLOCK_ID" => $iblockID));
Пример вывода настроек инфоблока:
$iblockID = 2; $result = CUserOptions::GetOption("form", "form_element_".$iblockID); var_export($result); echo "<br><br>"; CModule::IncludeModule("iblock"); $arFields = CIBlock::getarraybyid($iblockID); foreach ($arFields["FIELDS"] as $id => $arField) unset($arFields["FIELDS"][$id]["NAME"]); var_export($arFields["FIELDS"]);
При создании решения, если он должен быть установлен в директорию первого сайта (многосайтовость на одном домене), то ссылки должны учитывать директорию (поле SITE_DIR в настройках сайта).
Файлы с включаемыми областями, которые подключаются в шаблоне и хранятся в папке с шаблоном сайта (/local/templates/имя_шаблона/includes/
), при установке сайта мастером, не перекодируются в UTF-8. Правильно будет разместить файлы с шаблонами включаемых областей в папке /includes/
в корне.
/local/modules/модуль/install/wizards/партнер/мастер/
.if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
$DB
, $DBType
, $APPLICATION
, $USER
;
|