7  /  36

Решения типовых сайтов

Просмотров: 21319
Дата последнего изменения: 23.09.2021
Сложность урока:
3 уровень - средняя сложность. Необходимо внимание и немного подумать.
1
2
3
4
5

Кроме модулей в 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 путь к мастеру удаления демо-данных


10
Курсы разработаны в компании «1С-Битрикс»

Если вы нашли неточность в тексте, непонятное объяснение, пожалуйста, сообщите нам об этом в комментариях.
Развернуть комментарии