Дата последнего изменения: 01.03.2023
В реальности разработчики сторонних модулей используют чаще всего модуль как инсталлятор для своих, либо кастомизированных компонентов.
Визуально модули в Bitrix Framework для пользователя представляют собой лишь список на странице, где можно инсталлировать или деинсталлировать модуль в системе.
Поставим себе задачу сделать модуль, который бы просто при инсталляции ставил компонент. Возьмем компонент, который выводит текущую дату и время. Мы создали его в одном из предыдущих уроков. Имя компонента было dv:date.current.
Начнем с определения тех файлов и папок, которые нам нужно создать. Очевидно, что нам не нужно инсталлировать картинки, шаблоны, для решения нашей задачи не нужны административные скрипты и скрипты, которые вызывают административные, также не нужны.
Таким образом, структура модуля будет такой:
/install/
/components/
/dv/
/date.current/
/templates/
/.default/
Вся эта структура должна располагаться в папке /local/modules/dv_module, таким образом dv_module будет являться папкой создаваемого модуля.
Основной файл, код которого отвечает собственно за инсталляцию/деинсталляцию модуля — это /install/index.php. Код его приведен ниже:
<?
Class dv_module extends CModule
{
var $MODULE_ID = "dv_module";
var $MODULE_VERSION;
var $MODULE_VERSION_DATE;
var $MODULE_NAME;
var $MODULE_DESCRIPTION;
var $MODULE_CSS;
function __construct()
{
$arModuleVersion = array();
$path = str_replace("\\", "/", __FILE__);
$path = substr($path, 0, strlen($path) - strlen("/index.php"));
include($path."/version.php");
if (is_array($arModuleVersion) && array_key_exists("VERSION", $arModuleVersion))
{
$this->MODULE_VERSION = $arModuleVersion["VERSION"];
$this->MODULE_VERSION_DATE = $arModuleVersion["VERSION_DATE"];
}
$this->MODULE_NAME = "dv_module – модуль с компонентом";
$this->MODULE_DESCRIPTION = "После установки вы сможете пользоваться компонентом dv:date.current";
}
function InstallFiles()
{
CopyDirFiles($_SERVER["DOCUMENT_ROOT"]."/local/modules/dv_module/install/components",
$_SERVER["DOCUMENT_ROOT"]."/bitrix/components", true, true);
return true;
}
function UnInstallFiles()
{
DeleteDirFilesEx("/local/components/dv");
return true;
}
function DoInstall()
{
global $DOCUMENT_ROOT, $APPLICATION;
$this->InstallFiles();
RegisterModule("dv_module");
$APPLICATION->IncludeAdminFile("Установка модуля dv_module", $DOCUMENT_ROOT."/local/modules/dv_module/install/step.php");
}
function DoUninstall()
{
global $DOCUMENT_ROOT, $APPLICATION;
$this->UnInstallFiles();
UnRegisterModule("dv_module");
$APPLICATION->IncludeAdminFile("Деинсталляция модуля dv_module", $DOCUMENT_ROOT."/local/modules/dv_module/install/unstep.php");
}
}
?>
В этом файле декларируется новый класс — класс нашего модуля dv_module как потомок CModule. Далее идет определение конструктора dv_module(), в которой происходит определение переменных для вывода информации о модуле в списке модулей Bitrix Framework.
Метод DoInstall() вызывается при установке модуля из Панели управления, метод DoUninstall(), соответственно, при деинсталляции модуля. В методах этого класса вызываются так или иначе файлы /install/step.php, /install/unstep.php и /install/version.php. Первые два файла — это файлы, которые показываются при установке и деинсталляции модуля, соответственно. Вспомогательный файл version.php содержит информацию о версии модуля. Коды файлов:
/install/step.php
<?if(!check_bitrix_sessid()) return;?>
<?
echo CAdminMessage::ShowNote("Модуль dv_module установлен");
?>
/install/unstep.php
<?if(!check_bitrix_sessid()) return;?>
<?
echo CAdminMessage::ShowNote("Модуль успешно удален из системы");
?>
/install/version.php
<? $arModuleVersion = array( "VERSION" => "1.0.0", "VERSION_DATE" => "2010-06-03 17:00:00"); ?>
Совет от Коваленко Алексея: Если вы осуществляете в модулях какие то операции с обработкой данных или действия, на которые готовы доверить "допуск" к корректировке данных, заложите свои события в системе. И те специалисты, которые будут внедрять ваши решения будут вам за это благодарны. |