Модуль для Маркетплейса 1С-Битрикс: от идеи до публикации
Опубликовано: 03.09.2026
Технически модуль Bitrix Framework — это каталог в /bitrix/modules/ с классом установки и набором файлов. Сделать такой модуль для своего проекта можно за день. Сделать модуль, который переживёт установку на чужой сайт, — совсем другая работа.
Главное отличие: вы не контролируете окружение
Своё решение работает на сайте, который вы знаете: редакция, версия PHP, набор модулей, шаблон, структура инфоблоков. Тиражное решение поставят туда, где всё иначе:
- Другая редакция — часть API может быть недоступна.
- Другая версия ядра — то, что появилось в свежем релизе, у клиента может отсутствовать.
- Уже установлены решения других разработчиков, иногда с теми же именами констант и обработчиками тех же событий.
- Свой шаблон сайта, который не обязан содержать привычные вам блоки.
- Права на файлы и структура каталогов могут отличаться от типовых.
Из этого следует базовое правило: модуль не должен предполагать ничего, чего он сам не проверил.
Структура и обязательные файлы
Каркас модуля устроен строго, и отступать от него не стоит — Маркетплейс проверяет структуру:
install/index.php— класс установки, наследникCModule, с методами установки и удаления.include.php— точка входа, подключается при загрузке модуля.options.php— страница настроек в административном разделе.lang/— языковые файлы, зеркалящие структуру модуля.install/components/,install/js/,install/admin/— то, что копируется на сайт при установке.lib/— классы в пространстве имён вендора, автозагружаемые ядром.
Идентификатор модуля вида vendor.modulename — не формальность. Он должен совпадать с именем каталога, с префиксом пространства имён и с идентификатором в партнёрском кабинете. Расхождение здесь ломает и автозагрузку, и обновления.
Установка и удаление: половина проблем именно здесь
Установка обычно пишется внимательно, а удаление — по остаточному принципу. При проверке смотрят как раз на второе.
Корректный обработчик удаления должен:
- снять все зарегистрированные обработчики событий;
- удалить созданные таблицы — но только с явного согласия администратора, а не молча;
- убрать скопированные файлы из
/bitrix/components/,/bitrix/js/,/bitrix/admin/; - удалить свои настройки из таблицы опций;
- снять пункты меню и права доступа, если они добавлялись.
Отдельный момент — повторная установка. Модуль удалили с сохранением данных, поставили снова: он должен подхватить существующие таблицы, а не упасть на попытке создать их заново.
Совместимость: проверяйте, а не предполагайте
Перед использованием чужого API модуль обязан убедиться, что оно доступно. Проверка загруженности модуля перед обращением к его классам — не перестраховка, а условие работы на чужих сайтах. Если функциональность зависит от редакции, это должно быть явно указано в описании решения и мягко обработано в коде: сообщение администратору вместо фатальной ошибки.
То же касается версии PHP. Синтаксис, которого нет в минимально поддерживаемой версии, приведёт к белому экрану ещё до того, как отработает любая ваша проверка, — потому что файл не распарсится.
Локализация и тексты
Ни одной строки на русском в коде — всё через языковые файлы. Это требование Маркетплейса и одновременно здравый смысл: решение может попасть на портал с английским интерфейсом.
Стоит помнить и о том, что языковые константы глобальны. Префикс с идентификатором модуля в имени каждой константы избавляет от конфликтов с чужими решениями.
Что проверяют перед публикацией
Проверка в основном инженерная, а не формальная. Наиболее частые причины возврата на доработку:
- ошибки и предупреждения PHP при включённом выводе ошибок;
- прямые SQL-запросы вместо API там, где API есть;
- отсутствие проверки прав в административных скриптах;
- непроверенные пользовательские данные в запросах и в выводе;
- файлы, оставшиеся после удаления модуля;
- жёстко зашитые пути вместо констант документа и сайта;
- тексты в коде вместо языковых файлов.
Полезно перед отправкой поставить модуль на чистый сайт минимально поддерживаемой редакции, пройти сценарий «установил — настроил — использовал — удалил» и посмотреть, что осталось в файловой системе и в базе.
После публикации
Публикация — начало сопровождения, а не финал. Появятся вопросы в поддержке, отзывы, обновления ядра, которые что-то ломают, и запросы на функциональность, о которой вы не думали.
Здесь помогает дисциплина версий: обновление должно накатываться поверх любой ранее выпущенной версии, а не только предыдущей. Клиенты обновляются нерегулярно, и модуль вполне может прыгнуть через несколько релизов сразу.