Кратко — вариантов два основных. Либо «подменить» зарегистрированный в ядре JS‑расширение (CJSCore::RegisterExt) и указать свой файл в /local, либо просто подключить свой скрипт поверх (после) стандартного и в нём дописать/патчить нужную логику. Редактировать /bitrix/js/* напрямую не рекомендуется.
Рекомендации и пошагово
1) Найдите имя расширения
- В ядре расширения обычно регистрируется через CJSCore::RegisterExt. Найдите строку с RegisterExt в /bitrix/js/calendar или в /bitrix/modules/calendar — это даст точное имя расширения, например "calendar.compacteventform" (может отличаться). Это нужно чтобы знать, что именно подключает компонент (CJSCore::Init('имя')).
2) Способ A — «официальная» подмена через CJSCore::RegisterExt (рекомендуем)
- Положите свой изменённый файл, например:
/local/js/calendar/compacteventform/dist/compacteventform.bundle.js
- Зарегистрируйте расширение с тем же именем в init.php (выполняется раньше, чем большинство компонентов) — /local/php_interface/init.php:
<?php
use Bitrix\Main\Loader;
AddEventHandler("main", "OnBeforeProlog", function() {
if (Loader::includeModule('main')) {
CJSCore::RegisterExt('calendar.compacteventform', array(
'js' => '/local/js/calendar/compacteventform/dist/compacteventform.bundle.js',
'css' => '/local/js/calendar/compacteventform/dist/compacteventform.bundle.css', // если есть
'rel' => array('popup', 'ajax'), // зависимости — укажите нужные
'lang' => '/local/js/calendar/compacteventform/lang.php'
));
}
});
- Пояснения:
- Регистрация в /local/php_interface гарантирует, что ваша регистрация выполнится раньше/вместо стандартной или перезапишет её.
- Укажите корректные зависимости (rel) — иначе может нарушиться порядок загрузки.
- После этого компоненты, делающие CJSCore::Init('calendar.compacteventform'), будут подгружать ваш файл.
3) Способ B — подключить свой скрипт поверх и модифицировать поведение
- Если не хотите или нельзя «перерегистрировать» (опасения), можно просто подключить свой файл после стандартного и в нём выполнить патчирование:
- В шаблоне компонента или через Asset:
Bitrix\Main\Page\Asset::getInstance()->addJs('/local/js/calendar/compacteventform/patch.compacteventform.js');
- В patch‑скрипте переопределяйте только нужные функции/методы или подписывайтесь на события BX, чтобы избежать полной копии исходника.
- Плюс: проще вернуть назад, меньше шансов сломать совместимость.
4) Что нельзя/не стоит делать
- Не редактировать файлы в /bitrix/js/* — при обновлении системы ваши правки слетят.
- Не рассчитывайте, что создание /local/js/.../config.php автоматически «подменит» ядро — этот механизм не является универсальным. Надёжнее явная регистрация через CJSCore::RegisterExt.
5) Очистка кеша и дополнительные шаги
- После внесения изменений обязательно:
- Очистите кеш сайта (админка -> Настройки -> Очистить кеш) или физически удалите временные каталоги (например /bitrix/cache, /bitrix/managed_*), особенно если у вас включена оптимизация/minify JS.
- Если используется сборщик/минификатор (включена опция объединения/минификации JS в настройках продукта), отключите/пересоберите либо очистите соответствующий кеш.
- Проверьте, что ваша регистрация выполняется раньше, чем CJSCore::Init вызывается в компонентах (init.php в /local выполняется очень рано, поэтому обычно этого достаточно).
6) Рекомендации по поддерживаемости
- По возможности: не копируйте весь bundle, а патчьте/расширяйте через небольшую «обёртку» — так проще поддерживать при обновлениях.
- Документируйте изменения и храните их в системе контроля версий.
- Тестируйте на нескольких сценариях (компоненты, мобильная версия, ajax‑вызовы).
Итог
- Правильный и надёжный способ — положить свой JS в /local и зарегистрировать расширение с тем же именем через CJSCore::RegisterExt в /local/php_interface/init.php (или подключить патч‑скрипт через Asset). Не редактируйте /bitrix/js напрямую и не забывайте очистить кеш после изменений.