Создание модуля и проектный модуль
Собственный проектный модуль изолирует бизнес-логику проекта, заменяя перегруженный init.php структурированной библиотекой классов, контроллеров и обработчиков. Модуль регистрируется в системе через ModuleManager::registerModule(), а проверка зависимостей через Loader::includeModule() гарантирует предсказуемое поведение в консольных скриптах и фоновых задачах.
Прогресс хранится в этом браузере. Войдите, чтобы сохранить его в аккаунте.
Что нужно понимать
-
1
Namespace и автозагрузка
-
2
Регистрация модуля
-
3
Зависимости от других модулей
Материалы
Официальная документация
-
Автозагрузка классов Новая дока
Материалы BXMax
Проверь себя
Обработчик события зарегистрирован в install/index.php, модуль скопировали на прод, а обработчик молчит. Что пропустили?
Установку. Копирование папки не запускает DoInstall(), а значит ни registerModule(), ни registerEventHandler() не выполнились. Модуль ставят через страницу Marketplace или Модули в админке, либо тем же кодом из деплоя.
Почему синтаксическая ошибка в init.php кладёт весь сайт, а та же ошибка в классе модуля — только страницу, где класс вызвали?
init.php подключается в прологе на каждом хите раньше всего остального. Классы модуля грузятся автозагрузкой по требованию, и ошибка проявится только там, где класс реально нужен.
Заказчик хочет, чтобы модуль работал и без модуля catalog. Как оформить зависимость?
Проверять Loader::includeModule('catalog') в том месте, где нужна функциональность каталога, и ветвиться по результату. Loader::requireModule() бросает LoaderException и годится только там, где без модуля продолжать нельзя.
Класс обработчика лежит в вашем модуле, но при регистрации в toModuleId указали main. Что произойдёт при вызове события?
Ядро подключит include.php модуля main, а не вашего, и автозагрузка вашего класса не сработает: обработчик не будет найден. toModuleId — это модуль, где живёт класс обработчика.
Не сходится?
Спросите ассистента BXMax: он знает документацию и материалы сайта по этой теме.
Знаете материал лучше?
Предложите ссылку: после проверки она появится в этом разделе.
Войти, чтобы предложить