Модули
Структура и установка локального модуля
Минимальный установщик test.example и явное управление его ресурсами.
Файлы модуля
Каталог примера — /local/modules/test.example/. В нём include.php подключает модуль, lib/ содержит классы, install/index.php — установщик, а install/version.php — версию.
Имя класса установщика строится из ID модуля с заменой точки на подчёркивание: test_example.
install/version.php
<?php
$arModuleVersion = [
'VERSION' => '1.0.0',
'VERSION_DATE' => '2026-09-17 00:00:00',
]; install/index.php
<?php
use Bitrix\Main\ModuleManager;
class test_example extends CModule {
public function __construct() {
$arModuleVersion = [];
include __DIR__ . '/version.php';
$this->MODULE_ID = 'test.example';
$this->MODULE_VERSION = $arModuleVersion['VERSION'];
$this->MODULE_VERSION_DATE = $arModuleVersion['VERSION_DATE'];
$this->MODULE_NAME = 'Пример локального модуля';
$this->MODULE_DESCRIPTION = 'Минимальная регистрация модуля';
}
public function DoInstall() {
ModuleManager::registerModule($this->MODULE_ID);
}
public function DoUninstall() {
ModuleManager::unRegisterModule($this->MODULE_ID);
}
}Этот минимальный модуль регистрируется и снимается с регистрации. У него пока нет таблиц, файлов интерфейса и событий. Установщик не вызывает несуществующие installEvents или step.php.
Когда появляются ресурсы
При добавлении события сделайте симметричную регистрацию и отмену регистрации. Для таблиц используйте отдельную миграцию, а при удалении модуля явно решите, сохраняются ли данные. Снятие регистрации модуля не должно незаметно удалять пользовательскую историю.
Если установка состоит из нескольких шагов, предусмотрите повторный запуск после частичного сбоя. Одна транзакция БД не откатит скопированные файлы и отправленные запросы.