Кроме модулей в 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/ в корне.
Примечание: Включаемые области в мастере могут отсутствовать вообще, а значения по умолчанию для них хранятся в LANG файле, соответственно, перекодируются и заносятся в форму настроек решения (или берутся из областей, если решение уже было установлено раньше и файлы областей существуют в папке целевого сайта). При установке файлы включаемых областей создаются мастером на основе данных из формы настроек решения.
Другие моменты
- Чтобы мастер установки решения запускался сразу из Marketplace, после загрузки модуля, необходимо чтобы он лежал по адресу:
/local/modules/модуль/install/wizards/партнер/мастер/. - Во всех исполняемых файлах, не находящихся в публичной части, первая строка должна выглядеть так:
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die(); - В установочных файлах можно пользоваться глобальными объектами
$DB,$DBType,$APPLICATION,$USER; - Пользователь, запускающий мастер, будет авторизован как администратор (ID=1).
| Некоторые константы | |
| WIZARD_SITE_ID | идентификатор сайта |
| WIZARD_TEMPLATE_ID | идентификатор выбранного шаблона |
| WIZARD_TEMPLATE_RELATIVE_PATH | путь к выбранному шаблону в мастере относительно корня сайта |
| WIZARD_TEMPLATE_ABSOLUTE_PATH | полный путь к выбранному шаблону в мастере |
| WIZARD_THEME_ID | идентификатор выбранной темы |
| WIZARD_THEME_RELATIVE_PATH | путь к выбранной цветовой схеме в мастере относительно корня сайта |
| WIZARD_THEME_ABSOLUTE_PATH | полный путь к выбранной цветовой схеме в мастере |
| WIZARD_ABSOLUTE_PATH | полный путь к мастеру |
| WIZARD_RELATIVE_PATH | путь к мастеру относительно корня сайта |
| WIZARD_SERVICE_ABSOLUTE_PATH | полный путь к директории, где находится установщик сервиса |
| WIZARD_SERVICE_RELATIVE_PATH | путь к директории установщика сервиса относительно корня сайта |
| WIZARD_SITE_PATH | абсолютный путь к корню сайта |
| WIZARD_REINSTALL_DATA | путь к мастеру удаления демо-данных |
Курсы разработаны в компании «1С-Битрикс»
!Прокрутить вверх