Полный цикл в digital

Свой модуль "загрузка инфоблока"

Cоздадим модуль, который будет устанавливать в систему компоненты. Больше никаких задач модуль решать не будет, поэтому его код будут очень простым. Сами компоненты могут быть предназначены для работы например с инфоблоками.

Файловая структура модуля будет такой:

  • Папка hmarketing.infoblock
  • Папка install
    • Папка assets для наших компонентов
    • Файл index.php основной файл установки
    • Файл version.php файл с версией и датой выхода модуля
    • Файл instalInfo.php вывод сообщения в админке сайта об ошибке или успехе при установке модуля
    • Файл deInstalInfo.php вывод сообщения в админке сайта об ошибке или успехе при удалении модуля
  • Папка lang
    • Папка ru
      • Папка install
        • Файл instalInfo.php языковой файл вывода сообщения в админке сайта об ошибке при установке модуля
        • Файл deInstalInfo.php языковой файл вывода сообщения в админке сайта об ошибке при удалении модуля
        • Файл index.php языковой файл основного файла установки

При установке модуля происходит копирование содержимого директории:

local/modules/infoblock/install/assets/componenets

В директорию:

local/components/infoblock

Файл install/index.php

local/modules/infoblock/hmarketing.infoblock/index.php<?
// пространство имен для подключений ланговых файлов
use Bitrix\Main\Localization\Loc;
// пространство имен для управления (регистрации/удалении) модуля в системе/базе
use Bitrix\Main\ModuleManager;
// пространство имен с абстрактным классом для любых приложений, любой конкретный класс приложения является наследником этого абстрактного класса
use Bitrix\Main\Application;
// пространство имен для работы с директориями
use Bitrix\Main\IO\Directory;
// подключение ланговых файлов
Loc::loadMessages(__FILE__);
class hmarketing_infoblock extends CModule
{
    // переменные модуля
    public  $MODULE_ID;
    public  $MODULE_VERSION;
    public  $MODULE_VERSION_DATE;
    public  $MODULE_NAME;
    public  $MODULE_DESCRIPTION;
    public  $PARTNER_NAME;
    public  $PARTNER_URI;
    public  $errors;
    // конструктор класса, вызывается автоматически при обращение к классу
    public function __construct()
    {
        // создаем пустой массив для файла version.php
        $arModuleVersion = array();
        // подключаем файл version.php
        include_once(__DIR__ . '/version.php');
        // версия модуля
        $this->MODULE_VERSION = $arModuleVersion['VERSION'];
        // дата релиза версии модуля
        $this->MODULE_VERSION_DATE = $arModuleVersion['VERSION_DATE'];
        // id модуля
        $this->MODULE_ID = Loc::getMessage("MODULE_ID");
        // название модуля
        $this->MODULE_NAME = Loc::getMessage("MODULE_NAME");
        // описание модуля
        $this->MODULE_DESCRIPTION = Loc::getMessage("MODULE_DESCRIPTION");
        // имя партнера выпустившего модуль
        $this->PARTNER_NAME = Loc::getMessage("PARTNER_NAME");
        // ссылка на рисурс партнера выпустившего модуль
        $this->PARTNER_URI = Loc::getMessage("PARTNER_URI");
    }
    // метод отрабатывает при установке модуля
    public function DoInstall()
    {
        // глобальная переменная с обстрактным классом
        global $APPLICATION;
        // проверка версии Битрикс
        if (CheckVersion(ModuleManager::getVersion('main'), '14.00.00')) {
            // копируем файлы, необходимые для компонентов
            $this->InstallFiles();
            // регистрируем модуль в системе
            ModuleManager::registerModule($this->MODULE_ID);
        } else {
            // если версия битрикс меньше 14, значит выводим сообщение
            $APPLICATION->ThrowException(
                Loc::getMessage("INSTALL_ERROR")
            );
        }
        // подключаем скрипт с административным прологом и эпилогом
        $APPLICATION->includeAdminFile(
            Loc::getMessage('INSTALL_TITLE'),
            __DIR__ . '/instalInfo.php'
        );
        // для успешного завершения, метод должен вернуть true
        return true;
    }
    // метод отрабатывает при удалении модуля
    public function DoUninstall()
    {
        // глобальная переменная с обстрактным классом
        global $APPLICATION;
        // удаляем файлы, необходимые для работы модуля
        $this->UnInstallFiles();
        // удаляем регистрацию модуля в системе
        ModuleManager::unRegisterModule($this->MODULE_ID);
        // подключаем скрипт с административным прологом и эпилогом
        $APPLICATION->includeAdminFile(
            Loc::getMessage('DEINSTALL_TITLE'),
            __DIR__ . '/deInstalInfo.php'
        );
        // для успешного завершения, метод должен вернуть true
        return true;
    }
    // метод для копирования файлов модуля при установке
    public function InstallFiles()
    {
        // копируем файлы, которые устанавливаем вместе с модулем, копируем в пространство имен для компонентов которое будет иметь имя модуля hmarketing.7d
        CopyDirFiles(
            __DIR__ . '/assets/components',
            Application::getDocumentRoot() . '/local/components/' . $this->MODULE_ID . '/',
            true,
            true
        );
        // для успешного завершения, метод должен вернуть true
        return true;
    }
    // метод для удаления файлов модуля при удалении
    public function UnInstallFiles()
    {
        // удаляем директорию по указанному пути до папки
        Directory::deleteDirectory(
            Application::getDocumentRoot() . '/local/components/' . $this->MODULE_ID
        );
        // для успешного завершения, метод должен вернуть true
        return true;
    }
}

Файл install/version.php

local/modules/hmarketing.infoblock/install/version.php<?
$arModuleVersion = array(
    'VERSION'      => '1.0.0',
    'VERSION_DATE' => '2023-01-01 10:00:00'
);

Файл install/instalInfo.php

local/modules/hmarketing.infoblock/install/instalInfo.php<?
// пространство имен для подключений ланговых файлов
use Bitrix\Main\Localization\Loc;
// подключение ланговых файлов
Loc::loadMessages(__FILE__);
// метод возвращает объект класса CApplicationException, содержащий последнее исключение
if ($errorException = $APPLICATION->getException()) {
    // вывод сообщения об ошибке при установке модуля
    CAdminMessage::showMessage(
        Loc::getMessage('INSTALL_FAILED') . ': ' . $errorException->GetString()
    );
} else {
    // вывод уведомления при успешной установке модуля
    CAdminMessage::showNote(
        Loc::getMessage('INSTALL_SUCCESS')
    );
}
?>
<!-- Кнопка возврата к списку модулей -->
<form action="<?= $APPLICATION->getCurPage(); ?>">
    <input type="submit" value="<?= Loc::getMessage('RETURN_MODULES'); ?>">
</form>

Файл install/deInstalInfo.php

local/modules/hmarketing.infoblock/install/deInstalInfo.php<?
// пространство имен для подключений ланговых файлов
use Bitrix\Main\Localization\Loc;
// подключение ланговых файлов
Loc::loadMessages(__FILE__);
// метод возвращает объект класса CApplicationException, содержащий последнее исключение
if ($errorException = $APPLICATION->getException()) {
    // вывод сообщения об ошибке при удалении модуля
    CAdminMessage::showMessage(
        Loc::getMessage('DEINSTALL_FAILED') . ': ' . $errorException->GetString()
    );
} else {
    // вывод уведомления при успешном удалении модуля
    CAdminMessage::showNote(
        Loc::getMessage('DEINSTALL_SUCCESS')
    );
}
?>
<!-- Кнопка возврата к списку модулей -->
<form action="<?= $APPLICATION->getCurPage(); ?>">
    <input type="submit" value="<?= Loc::getMessage('RETURN_MODULES'); ?>">
</form>

Файлы в дириктории /lang/ru/

/lang/ru/install/deInstalInfo.php<?
$MESS['DEINSTALL_FAILED'] = 'Ошибка при удалении модуля';
$MESS['DEINSTALL_SUCCESS'] = 'Модуль успешно удален';
$MESS['RETURN_MODULES'] = 'Вернуться в список модулей';
lang/ru/install/instalInfo.php<?
$MESS['INSTALL_SUCCESS'] = 'Модуль успешно установлен';
$MESS['INSTALL_FAILED'] = 'Ошибка при установке модуля';
$MESS['RETURN_MODULES'] = 'Вернуться в список модулей';
lang/ru/install/index.php<?
$MESS['INSTALL_ERROR'] = 'Версия ядра Битрикс, должна быть не ниже 14 версии';
$MESS['INSTALL_TITLE'] = 'Установка модуля';
$MESS['DEINSTALL_TITLE'] = 'Удаление модуля';
$MESS['MODULE_ID'] = 'hmarketing.infoblock';
$MESS['MODULE_NAME'] = 'Компонент Инфоблок';
$MESS['MODULE_DESCRIPTION'] = 'Установка компонентов для работы сайта';
$MESS['PARTNER_NAME'] = 'Эйч Маркетинг';
$MESS['PARTNER_URI'] = 'https://hmarketing.ru';
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг