CModule – базовый класс для работы с модулями в 1С-Битрикс. Все модули в системе должны наследоваться от данного класса и располагаться в файле /bitrix/modules/[ID_модуля]/install/index.php
. В этой статье мы рассмотрим основные свойства и методы класса CModule, приведём примеры кода и разберём важные нюансы при разработке собственных модулей.

Основные свойства класса
Класс CModule имеет ряд важных свойств, которые вы задаёте при создании собственного модуля:
- MODULE_ID
Идентификатор модуля (например,iblock
илиmy.module
). Должен совпадать с названием каталога модуля. - MODULE_VERSION
Текущая версия модуля (например,1.0.0
). - MODULE_VERSION_DATE
Дата текущей версии модуля (обычно в форматеYYYY-MM-DD
). - MODULE_NAME
Человекочитаемое название модуля (например, «Модуль работы с информационными блоками»). - MODULE_DESCRIPTION
Краткое описание модуля. - MODULE_GROUP_RIGHTS
Указывает, поддерживает ли модуль схему распределения прав доступа (значение"Y"
означает, что модуль поддерживает).
Наследование от CModule
Чтобы создать собственный модуль, необходимо в файле /bitrix/modules/[ID_модуля]/install/index.php
объявить класс с именем, совпадающим с ID модуля (точки и дефисы в имени заменяются на нижнее подчеркивание). Например, если модуль называется my.module
, то класс следует назвать my_module
:
<?php
use \Bitrix\Main\Localization\Loc;
Loc::loadMessages(__FILE__); // Для локализации
class my_module extends CModule
{
public function __construct()
{
$this->MODULE_ID = "my.module";
$this->MODULE_NAME = "Мой пользовательский модуль";
$this->MODULE_DESCRIPTION = "Описание моего модуля";
$this->MODULE_VERSION = "1.0.0";
$this->MODULE_VERSION_DATE = "2025-01-01";
$this->MODULE_GROUP_RIGHTS = "Y";
}
// Установка модуля
public function DoInstall()
{
global $APPLICATION;
// Шаг 1. Установка БД, таблиц и пр.
$this->InstallDB();
// Шаг 2. Регистрация модуля в системе
$this->Add(); // или RegisterModule($this->MODULE_ID);
// Шаг 3. Установка файлов
$this->InstallFiles();
// Шаг 4. Установка событий
$this->InstallEvents();
// Доп. логика
$APPLICATION->IncludeAdminFile(
"Установка модуля: " . $this->MODULE_NAME,
$_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/my.module/install/step.php"
);
}
// Удаление (деинсталляция) модуля
public function DoUninstall()
{
global $APPLICATION;
// Шаг 1. Удаление событий
$this->UnInstallEvents();
// Шаг 2. Удаление файлов
$this->UnInstallFiles();
// Шаг 3. Удаление БД, таблиц
$this->UnInstallDB();
// Шаг 4. Удаление модуля из таблицы b_module
$this->Remove(); // или UnRegisterModule($this->MODULE_ID);
// Доп. логика
$APPLICATION->IncludeAdminFile(
"Деинсталляция модуля: " . $this->MODULE_NAME,
$_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/my.module/install/unstep.php"
);
}
// Установка БД
public function InstallDB()
{
// Пример. Создание собственной таблицы.
// global $DB;
// $DB->RunSQLBatch($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/my.module/install/db/install.sql");
return true;
}
// Удаление БД
public function UnInstallDB()
{
// Пример. Удаление таблицы.
// global $DB;
// $DB->RunSQLBatch($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/my.module/install/db/uninstall.sql");
return true;
}
// Установка файлов
public function InstallFiles()
{
// Например, копирование ресурсов модуля
// CopyDirFiles(
// $_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/my.module/install/components",
// $_SERVER["DOCUMENT_ROOT"]."/bitrix/components",
// true, true
// );
return true;
}
// Удаление файлов
public function UnInstallFiles()
{
// Удаление установленных ранее файлов при деинсталляции модуля
return true;
}
// Установка событий
public function InstallEvents()
{
// Регистрируем почтовые события, обработчики, пр.
return true;
}
// Удаление событий
public function UnInstallEvents()
{
// Удаляем зарегистрированные обработчики
return true;
}
// Индивидуальная схема распределения прав
public function GetModuleRightList()
{
return [
"reference_id" => ["D","R","W"],
"reference" => [
"[D] Доступ запрещён",
"[R] Чтение",
"[W] Полный доступ"
]
];
}
}
Обратите внимание:
- MODULE_ID всегда указывается точно так же, как в названии каталога модуля, за исключением замен точек/дефисов на подчеркивания при объявлении класса.
- Для подключения перевода используется
Loc::loadMessages(__FILE__)
, и далее вы можете работать с языковыми файлами/lang/ru/install/index.php
. - Все методы, отвечающие за установку, удаление, копирование файлов и т. д., можно переопределять под свои нужды.
Методы класса CModule
Ниже рассмотрим самые важные методы:
GetList
public static function GetList()
- Описание: Возвращает список установленных модулей в виде объекта
CDBResult
. - Пример:
$rsInstalledModules = CModule::GetList(); while ($arModule = $rsInstalledModules->Fetch()) { echo "<pre>"; print_r($arModule); echo "</pre>"; }
GetDropDownList
public static function GetDropDownList($strSqlOrder = "ORDER BY ID")
- Описание: Возвращает список модулей в виде
CDBResult
для использования в элементах форм, таких какSelectBox
. - Параметр:
$strSqlOrder
— строка с SQL-порядком сортировки (по умолчаниюORDER BY ID
– сортировка по возрастанию поляID
).
- Пример:
$rs = CModule::GetDropDownList("ORDER BY ID"); echo SelectBoxFromArray("module_id", $rs, $module_id);
Add
public function Add()
- Описание: Регистрирует (добавляет) модуль в таблицу
b_module
. - Пример:
$m = new CModule; $m->MODULE_ID = "iblock"; $m->Add();
Remove
public function Remove()
- Описание: Удаляет регистрационную запись о модуле из базы данных
b_module
. - Пример:
function UnRegisterModule($id) { $m = new CModule; $m->MODULE_ID = $id; $m->Remove(); CAllMain::DelGroupRight($id); }
GetModuleRightList
public function GetModuleRightList()
- Описание: Возвращает массив, описывающий индивидуальную схему распределения прав модуля. Если модуль поддерживает собственную схему (свойство
MODULE_GROUP_RIGHTS="Y"
), то в классе можно объявить такой метод. Если метод не переопределён, то используется схема по умолчанию. - Пример (внутри класса модуля):
public function GetModuleRightList() { return [ "reference_id" => ["D","R","W"], "reference" => [ "[D] Доступ запрещен", "[R] Чтение", "[W] Полный доступ" ] ]; }
- Использование:
$rs = CModule::GetList(); while ($ar = $rs->Fetch()) { $MID = $ar["ID"]; if ($MID != "main") { include_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/".$MID."/install/index.php"); if (class_exists($MID)) { $obModule = new $MID; if ($obModule->MODULE_GROUP_RIGHTS == "Y") { if (method_exists($obModule, "GetModuleRightList")) $arRights = $obModule->GetModuleRightList(); else $arRights = $APPLICATION->GetDefaultRightList(); echo $MID.": ".SelectBoxFromArray( "RIGHTS_MODULE_".$MID, $arRights, ${"RIGHTS_MODULE_".$MID}, "<по умолчанию>" ); } } } else { // для главного модуля $arRights = $APPLICATION->GetMainRightList(); echo $MID.": ".SelectBoxFromArray( "RIGHTS_MODULE_".$MID, $arRights, ${"RIGHTS_MODULE_".$MID}, "<по умолчанию>" ); } }
DoInstall
public function DoInstall()
- Описание: Запускает процедуру инсталляции модуля. В этом методе обычно вызываются:
InstallDB()
InstallFiles()
RegisterModule($this->MODULE_ID)
или$this->Add()
InstallEvents()
- Пример: см. пример класса
my_module
выше.
DoUninstall
public function DoUninstall()
- Описание: Запускает процедуру деинсталляции модуля. В этом методе обычно вызываются:
UnInstallEvents()
UnInstallFiles()
UnInstallDB()
UnRegisterModule($this->MODULE_ID)
или$this->Remove()
- Пример: см. пример класса
my_module
выше.
IncludeModule
public static function IncludeModule($module_name)
- Описание: Проверяет, установлен ли модуль, и если да, подключает его файл
/bitrix/modules/[ID_модуля]/include.php
. Возвращаетtrue
илиfalse
. - Пример:
if (CModule::IncludeModule("iblock")) { // Теперь доступны классы модуля iblock // например, CIBlock, CIBlockElement и т.д. }
IsInstalled
public function IsInstalled()
- Описание: Проверяет, установлен ли модуль (по наличию записи в
b_module
). Возвращаетtrue
, если установлен, иначеfalse
. - Пример:
$obModule = new my_module; if ($obModule->IsInstalled()) { echo "Модуль установлен!"; } else { echo "Модуль не установлен!"; }
Типичный сценарий установки модуля
- Создаёте в
/bitrix/modules/my.module/install/index.php
классmy_module
, наследуемый отCModule
. - Переопределяете нужные методы:
InstallDB()
,InstallFiles()
,InstallEvents()
,DoInstall()
и т.д. - В админке или вручную вызываете процедуру установки, например:
include_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/my.module/install/index.php"); $obModule = new my_module; if (!$obModule->IsInstalled()) { $obModule->DoInstall(); // установка модуля }
- После выполнения
DoInstall()
ваш модуль зарегистрируется в системе, загрузит все необходимые файлы и будет готов к использованию.
Типичный сценарий удаления модуля
- В том же файле
/bitrix/modules/my.module/install/index.php
вы уже определили методDoUninstall()
. - Для удаления модуля в админке или скрипте вызываете:
include_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/my.module/install/index.php"); $obModule = new my_module; if ($obModule->IsInstalled()) { $obModule->DoUninstall(); }
- После выполнения
DoUninstall()
будут удалены настройки, файлы, таблицы БД (при необходимости) и модуль будет исключён изb_module
.
Часто используемые функции и классы
- RegisterModule($moduleID)
Регистрирует модуль вb_module
. Аналогично вызову$module->Add();
- UnRegisterModule($moduleID)
Удаляет модуль изb_module
. Аналогично$module->Remove();
- \Bitrix\Main\Loader
Современный класс для подключения модулей. Метод\Bitrix\Main\Loader::includeModule("my.module")
эквивалентенCModule::IncludeModule("my.module")
. - CMain::GetUserRight($moduleID)
Проверяет права текущего пользователя на указанный модуль. - CMain::DelGroupRight($moduleID)
Сбрасывает права доступа для всех групп для заданного модуля.
Полезные советы по разработке модулей
- Правильное именование
Убедитесь, что название модуля (ID) уникально и понятно. Если ваш модуль называетсяmy.module
, каталог и все настройки должны быть последовательны (каталогmy.module
, классmy_module
). - Соблюдайте структуру папок
Часто в структуре модуля создают папки:/install/components
– для компонентов,/install/db
– для SQL-скриптов установки/удаления таблиц,/install/admin
– для административных страниц,/install/js
– для JavaScript-файлов и т. д.
- Локализация
Храните все тексты, выводимые пользователю, в языковых файлах, чтобы легко переводить модуль на другие языки. - Проверка совместимости
Учитывайте версии ядра Битрикс. Некоторые методы могут меняться, особенно при переходе на D7. - Отладка
- Включайте отображение ошибок и логируйте процесс инсталляции/деинсталляции, чтобы было проще искать проблемы.
- При ошибках установки/удаления не забудьте корректно «откатить» все внесённые изменения (файлы, таблицы, события).
Заключение
Класс CModule – это фундамент для создания собственных модулей в 1С-Битрикс. Понимание принципов наследования, структуры каталога модуля и правильной реализации методов установки/удаления обеспечит вам удобную интеграцию ваших решений в систему. Используйте приведённые примеры и не забывайте документировать свой код, чтобы впоследствии было проще вносить изменения и поддерживать модуль в актуальном состоянии.
Надеемся, это руководство поможет вам быстрее освоить разработку модулей на базе 1С-Битрикс, а примеры кода станут основой для ваших собственных решений. Удачного кодинга!