Создание простого модуля для Битрикс

Поставим себе задачу сделать модуль, который бы просто при инсталляции ставил кoмпонент, который мы сделали с вами в прошлой статье.

Все модули Битрикс располагаются в папке /bitrix/modules/, наш модуль не является исключением и также будет располагаться в этой же папке.

Структура обязательных файлов модуля:

  • /bitrix/modules/ID модуля/ - корневой каталог модуля
    • /admin/ - каталог с административными скриптами модуля
      • menu.php - файл с административным меню модуля
    • /classes/ - скрипты с классами модуля
      • /general/ - классы модуля не зависящие от используемой базы данных
      • /mysql/ - классы модуля предназначенные для работы только с MySQL
      • /oracle/ - классы модуля предназначенные для работы только с Oracle
    • /lang/ID языка/ - каталог с языковыми файлами скриптов модуля
    • /install/ - каталог с файлами используемыми для инсталляции и деинсталляции модуля
      • /admin/ - каталог со скриптами подключающими административные скрипты модуля (вызывающие скрипты)
      • /db/ - каталог с SQL скриптами для инсталляции/деинсталляции базы данных
        • /mysql/ - SQL скрипты для инсталляции/деинсталляции таблиц в MySQL
        • /oracle/ - SQL скрипты для инсталляции/деинсталляции таблиц в Oracle
      • /images/ - каталог с изображениями используемыми модулем; после инсталляции модуля они должны быть скопированы в каталог /bitrix/images/ID модуля/
      • /templates/ - каталог с компонентами модуля
        • /ID модуля/ - каталог с основными файлами компонент
        • /lang/ID языка/ID модуля/ - в данном каталоге находятся языковые файлы компонент модуля
      • index.php - файл с описанием модуля
    • include.php - данный файл подключается в тот момент когда речь идет о подключении модуля в коде, в нем должны находиться включения всех файлов с библиотеками функций и классов модуля
    • default_option.php - содержит массив с именем $ID модуля_default_option, в котором заданы значения по умолчанию для параметров модуля
    • options.php - данный файл подключается на странице настройки параметров модулей в административном меню "Настройки"
    • prolog.php - файл должен подключаться во всех административных скриптах модуля, помимо всего прочего в нем должны быть определены следующие две константы:
      ADMIN_MODULE_NAME - идентификатор модуля;
      ADMIN_MODULE_ICON - HTML код для большой иконки модуля выводимой над заголовком страницы.

В структуру модуля могут входить любые другие файлы и папки, которые вы пожелаете.

Определим структуру нашего модуля

Очевидно, что нам не нужно инсталлировать картинки, шаблоны, а так же для решения нашей задачи не нужны административные скрипты и скрипты, которые вызывают административные, также не нужны. Да и новых классов в модуле декларироваться не будет.

Таким образом, структура модуля будет такой:

/install/
/install/index.php
/install/step1.php
/install/unstep1.php
/install/components/  - Создаем собстенную папку для размещения наших компонентов
/install/components/elements/ - наш компонент созданный в  статье Создание простого компонента Битрикс

Вся эта структура должна располагаться в папке /bitrix/modules/dev_module. Таким образом dev_module будет являться папкой нашего модуля.

Основной файл, код которого отвечает собственно за инсталляцию/деинсталляцию модуля — это /install/index.php Код его приведен ниже:

 <?
global $MESS;
$PathInstall = str_replace("\\", "/", __FILE__);
$PathInstall = substr($PathInstall, 0, strlen($PathInstall)-strlen("/index.php"));
IncludeModuleLangFile($PathInstall."/install.php");

if(class_exists("dev_module")) return;

Class dev_module extends CModule
{
	var $MODULE_ID = "dev_module";
	var $MODULE_VERSION;
	var $MODULE_VERSION_DATE;
	var $MODULE_NAME;
	var $MODULE_DESCRIPTION;
	var $MODULE_GROUP_RIGHTS = "Y";

	function dev_module()
	{
	$this->MODULE_VERSION = '0.1';
                $this->MODULE_VERSION_DATE = '2011-1-27';
                $this->MODULE_NAME = "dev_module – модуль с компонентом";
                $this->MODULE_DESCRIPTION = 'После установки вы сможете пользоваться компонентом user:elements';
	}

	function DoInstall()
	{
		global $DOCUMENT_ROOT, $APPLICATION;
		$this->InstallFiles();
		RegisterModule("dev_module");
		$APPLICATION->IncludeAdminFile("Установка модуля dev_module", $DOCUMENT_ROOT."/bitrix/modules/dev_module/install/step1.php");		
	}
	
	function InstallFiles($arParams = array())
	{
		CopyDirFiles($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/dev_module/install/components", $_SERVER["DOCUMENT_ROOT"]."/bitrix/components/user/", true, true);
		return true;
	}
	function UnInstallFiles()
	{
		DeleteDirFilesEx("/bitrix/components/user/elements/");
		return true;
	}
	
	function DoUninstall()
	{
		global $DOCUMENT_ROOT, $APPLICATION;
		$this->UnInstallFiles();
		UnRegisterModule("dev_module");
		$APPLICATION->IncludeAdminFile("Деинсталляция модуля dev_module", $DOCUMENT_ROOT."/bitrix/modules/dev_module/install/unstep1.php");
	}
}
?>

В этом файле создается новый класс — класс нашего модуля dev_module как потомок CModule. Далее идет определение конструктора dev_module(), в которой происходит определение переменных для вывода информации о модуле в списке модулей Битрикс.

Метод DoInstall() будет вызываться при нажатии на кнопку «Установить» в списке модулей административной панели.
Соответственно, DoUninstall() – при нажатии на кнопку «Удалить».

В методах этого класса вызываются так или иначе файлы /install/step.php , /install/unstep.php. Это файлы, которые показываются при установке и деинсталляции модуля, соответственно.

Если нужен многошаговый установщик, то следует создать файлы step2.php, step3.php и т.д.

Код файлов ниже:


/install/step1.php

 <?if(!check_bitrix_sessid()) return;?><?
	echo CAdminMessage::ShowNote("Модуль dev_module установлен");
?>
/install/unstep1.php
 <?if(!check_bitrix_sessid()) return;?><?
	echo CAdminMessage::ShowNote("Модуль успешно удален из системы");
?>

Тэги: 

Оставлен SERGEY (не проверено) 5 Март, 2013 - 15:22

Можно ли перенести (скопировать) файлы модуля и компонент, входящих в модуль на младшую редакцию Битрикса ?

Оставлен admin 9 Март, 2013 - 11:29

Да, конечно, от редакции модуль не зависит

Оставлен Олег (не проверено) 14 Сентябрь, 2013 - 20:29

Каков смысл в этом коде:
$PathInstall = str_replace("\\", "/", __FILE__);
$PathInstall = substr($PathInstall, 0, strlen($PathInstall)-strlen("/index.php"));
IncludeModuleLangFile($PathInstall."/install.php"); ???

Если языковой файл расположен по стандартному пути, то достаточно IncludeModuleLangFile(__FILE__);
, а если по не стандартному, то не проще ли просто одной строкой прописать путь, так как это сделано с остальными устанавливаемыми файлами.

Дань традиции :-)?

Оставлен admin 15 Сентябрь, 2013 - 12:34

Получается что дань, я, если честно не знал для чего этот код, так как просто взял из готового модуля. :) 

Оставлен Гость (не проверено) 4 Сентябрь, 2014 - 17:16

а вот это очень фигово, учить других уже начал, а у самого представление начальное, даже код собственного примера не понимаешь полностью

именно из-за таких блогов у нас тотальная безграмотность и дилетантство в среде веб-программистов

Оставлен admin 7 Сентябрь, 2014 - 01:17

Я думаю прежде всего нужно уметь думать своей головой, если этого  нет - то даже если это будет супер понятный материал с мего автором  который сам эту систему изобрёл-  то не поможет научитья писать хороший код. 

Оставлен Влад (не проверено) 16 Октябрь, 2014 - 16:39

Так и скажи, что ты бездумно скопировал документацию, причем кусками в свой блог http://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=2823

Оставлен admin 23 Октябрь, 2014 - 15:20

Я бы не сказал что совсем бездумно, кроме части кода с языками остальное проработал, всё таки информацию структурировал, сделал более кратко и понятно,  дополнил своей на основе которой делал свой модуль. 

Оставлен lifter (не проверено) 3 Ноябрь, 2014 - 15:54

Это копируемый из стандартных модулей код, на новом ядре лучше писать
use Bitrix\Main\Localization\Loc;
Loc::loadMessages(__FILE__);

Оставлен Эл (не проверено) 15 Июнь, 2015 - 14:14

спасибо!

Оставлен Валерия (не проверено) 17 Январь, 2014 - 13:57

Спасибо за статью

Оставлен Дмитрий (не проверено) 17 Июль, 2015 - 11:21

Урок написан не полностью, для новичков не понятно даже бонально начало:
-"IncludeModuleLangFile($PathInstall."/install.php");" -> откуда мне брать этот install.php, вы про его написание и слова не сказали! сделали бы хотя бы архив со всеми файлами, сам бы разобрался если вам трудно было написать!

Оставлен Никола (не проверено) 16 Март, 2017 - 22:50

Спасибо за заметку, спустя такое время, пригодилось! Главное наглядность принципа работы, остальным комментаторам камень в огород, ибо думать нужно самим. Не всегда есть время потрошить модуль.

Добавить комментарий

comment

  • Доступные HTML теги: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.
2011 © zapiski.pro