Разделы Написать в Telegram

Куда класть модуль

Два законных места: /local/modules/mrlexndr.translate/ и /bitrix/modules/mrlexndr.translate/. Работает модуль одинаково из обоих, но последствия у выбора разные.

Кладите в /local/modules/

Это рекомендация, и вот почему.

Обновление ядра не трогает /local/. Каталог /bitrix/ принадлежит платформе, и обновление Битрикса вправе делать с ним что угодно. Модуль там переживёт большинство обновлений, но это везение, а не гарантия.

/local/ обычно под системой контроля версий, а /bitrix/ — нет. На проекте, где код едет через git, модуль в /bitrix/ выпадает из истории целиком.

Когда всё-таки /bitrix/modules/

Когда /local/ на проекте не используется вовсе — такое встречается на старых сборках. Тогда положить модуль рядом с остальными в /bitrix/modules/ честнее, чем заводить /local/ ради одного каталога.

Две копии — источник тихих ошибок

Битрикс ищет модуль сначала в /local/modules/, потом в /bitrix/modules/, и берёт первый найденный. Если каталог остался в обоих местах, работает тот, что в /local/, а правки вы, возможно, льёте во второй.

Выглядит это так: файлы изменены, а поведение прежнее. Или наоборот — обновили через админку, а на сайте старый код.

Проверить, откуда модуль работает на самом деле, можно прямо из консоли сайта:

php -r 'require "bitrix/modules/main/include/prolog_before.php";
echo (new ReflectionClass("mrLexndr\Translate\Lang"))->getFileName(), PHP_EOL;'

Путь в ответе — и есть рабочая копия. Вторую надо удалить, а не оставлять «на всякий случай».

После переезда

Если модуль переехал из одного каталога в другой, нажмите Обновить в Маркетплейсе. Установщик раскладывает файлы вне своего каталога — стили, скрипты, заглушки страниц админки и эндпоинт, — и после переезда эти копии указывают в прежнее место. Подробнее — Обновление на бою.