Дата последнего изменения: 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"); ?>
Совет от Коваленко Алексея: Если вы осуществляете в модулях какие то операции с обработкой данных или действия, на которые готовы доверить "допуск" к корректировке данных, заложите свои события в системе. И те специалисты, которые будут внедрять ваши решения будут вам за это благодарны. |