Свой модуль не устанавливается - разбор причин
Модуль не появляется в списке установки или его установка обрывается на середине. Разбираем причины по убыванию частоты, начиная с описания модуля.
С чего начать
Проверяем обязательный минимум описания:
ls -la /home/bitrix/www/local/modules/vendor.module/install/grep -n 'MODULE_ID\|PARTNER_NAME\|class ' /home/bitrix/www/local/modules/vendor.module/install/index.php | headcat /home/bitrix/www/local/modules/vendor.module/install/version.php# без версии, кода модуля и имени партнёра решение считается некорректнымФайл версии и описание модуля проверяются раньше любого кода установки. Пропуск одного из четырёх обязательных значений даёт отказ, в котором про конкретное поле ничего не сказано.
Сверяем имя класса с кодом модуля:
class vendor_module extends CModule // точки в коде заменяются подчёркиваниями{ public $MODULE_ID = 'vendor.module';}// имя класса не совпало с кодом - методы установки просто не вызовутсяПлатформа ищет класс по имени, собранному из кода модуля. Несовпадение выглядит как молчание: модуль в списке есть, а установка ничего не делает.
Ищем скрытые файлы после переноса:
find /home/bitrix/www/local/modules/vendor.module -name '.*' -maxdepth 3 | headls -la /home/bitrix/www/local/modules/vendor.module/install/components/*/*/ | head# файлы .description.php и .parameters.php обязаны быть на местеФайлы, начинающиеся с точки, теряются при переносе через файловые менеджеры и архивы. Компонент без файла описания не регистрируется, и установка обрывается без внятного сообщения.
Проверяем сохранение настроек модуля:
// options.php: блок сохранения идёт ДО вывода формыif ($request->isPost() && $request['save'] && check_bitrix_sessid()) { Option::set('vendor.module', 'api_key', (string)$request['api_key']);}// без проверки ключа сессии сохранение молча не срабатываетСтраница настроек модуля собирается в одном файле, и порядок здесь важен. Сохранение после вывода формы означает, что форма показывает прежние значения, даже когда запись прошла.
Причины
-
Описание модуля неполное примерно 30% случаев
ПризнакРешение не принимается вовсе: сообщение о неверном содержимом архива или пустой список установки.
ПроверкаСмотрим файл версии и обязательные значения в описании: код модуля, имя и адрес партнёра.
Что делатьЗаполняем все обязательные значения: проверка идёт по ним до запуска кода установки.
-
Имя класса не совпадает с кодом модуля примерно 25% случаев
ПризнакМодуль в списке есть, кнопка установки работает, но ничего не происходит.
ПроверкаСравниваем имя класса в описании с кодом модуля: точки заменяются подчёркиваниями.
Что делатьПриводим имя класса к коду модуля и наследуемся от базового класса без ведущего слеша.
-
Потерялись файлы, начинающиеся с точки примерно 20% случаев
ПризнакУстановка обрывается на регистрации компонентов или компоненты не появляются.
ПроверкаИщем в каталоге модуля файлы описания компонентов и параметров.
Что делатьПереносим модуль архивом без потери скрытых файлов и проверяем их наличие после распаковки.
-
Тексты захардкожены мимо языковых файлов примерно 15% случаев
ПризнакУстановка проходит, но русский текст в интерфейсе выглядит нечитаемым.
ПроверкаИщем строки на русском прямо в коде модуля вместо обращения к языковым сообщениям.
Что делатьВыносим тексты в языковые файлы: перекодировка при установке применяется только к ним.
-
Обновление зовёт код, которого ещё нет примерно 10% случаев
ПризнакОбновление модуля падает с ошибкой о ненайденном классе.
ПроверкаСмотрим файл обновления: он вызывает API самого обновления, ещё не подключённого на этом запросе.
Что делатьДелаем код обновления независимым от нового API и безопасным для повторного запуска.
Частые вопросы
Где должен лежать свой модуль?
В каталоге решений проекта, рядом с остальным своим кодом. Каталог ядра для своих модулей не годится: обновление платформы его перезаписывает.
Почему настройки модуля не сохраняются?
Блок сохранения стоит после вывода формы или не проверяет одноразовый ключ сессии. Сохранение размещают до формы и с обязательной проверкой ключа.
Почему не работает переход к настройкам модуля?
В административном скрипте не объявлено имя модуля. Без него платформа не знает, к какому модулю относится страница.
Нужно ли проверять результат подключения модуля?
Да, но по-разному: там, где без модуля сценарий бессмыслен, берут строгое подключение с ошибкой. Мягкая проверка нужна только с реальной запасной веткой.
Как проверить установку до передачи заказчику?
Развернуть модуль на чистой копии сайта и пройти установку и удаление целиком. Установка на своём стенде, где файлы уже лежат, ничего не проверяет.
Смежное
- Свой модуль - оглавление подтемы
- Страница админки не открывается: разбор причин - если модуль встал, а страницы нет
- Свой модуль: структура, установка, автозагрузка классов - как устроен модуль
- Публикация своего модуля: требования, обновления, поддержка - подготовка решения к передаче
- Языковые файлы: сообщения, подстановки, второй язык - куда выносят тексты
- Готовое решение в проекте: установка, вмешательство, удаление - установка чужих решений
- Модули и решения в 1С-Битрикс - устройство модулей целиком
- Модуль установился, но не работает - установка прошла, а признаков жизни нет