Переопределение методов core.js
Подключите его в main.tpl.php шаблона modern или дочернего.
Заменив
<?php $this->addMainTplJSName('core'); ?>
<?php $this->addMainTplJSName(['core','core2']); ?>
var icms = icms || {}; icms.forms = (function ($) { this.initFilterForm = function(selector){ var form = $(selector); var filter_panel = $(form).closest('.icms-filter-panel'); var filter_link_open = $(filter_panel).find('.icms-filter-link__open'); var filter_link_close = $(filter_panel).find('.icms-filter-link__close'); $(filter_link_open).on('click', function (){ $(this).addClass('d-none'); $(filter_panel).find('.icms-filter-container').removeClass('d-none'); return false; }); $(filter_link_close).on('click', function (){ $(filter_panel).find('.icms-filter-container').addClass('d-none'); $(filter_link_open).removeClass('d-none'); return false; }); var change = function (){ var sbutton = $(form).find('.buttons button[type = submit]'); $(sbutton).prop('disabled', true).addClass('is-busy'); var o = _this.getFilterFormParams(form); var submit_uri; if(Object.keys(o).length > 0 || $(form).find('.cancel_filter_link').length === 0){ submit_uri = $(form).attr('action'); } else { submit_uri = $(form).find('.cancel_filter_link').attr('href'); } o.show_count = 1; var query_string = $.param(o); $.get(submit_uri+'?'+query_string, function(result){ if(result.filter_link){ $(form).data('filter_link', result.filter_link); } else { $(form).removeData('filter_link'); } setTimeout(function (){ $(sbutton).removeClass('is-busy').val(result.hint).prop('disabled', false).find('span').text(result.hint); }, 200); icms.events.run('icms_content_filter_changed', form); }, 'json'); }; var delay = function () { var timer = 0; return function () { var context = this, args = arguments; clearTimeout(timer); timer = setTimeout(function () { change.apply(context, args); }, 500); }; }; $(form).find('select, input[type=checkbox]').on('change', change); $(form).find('input:not([type=checkbox]), textarea').on('input', delay()); $(form).find('.buttons button[type = submit]').on('click', function (){ var filter_link = $(form).data('filter_link'); if(filter_link){ window.location.href = filter_link; return false; } var submit_uri = $(form).attr('action'); var o = _this.getFilterFormParams(form); var query_string = $.param(o); if(query_string.length > 0){ window.location.href = submit_uri+'?'+query_string; } else { var cancel_filter_link = $(form).find('.cancel_filter_link').attr('href'); if(!cancel_filter_link){ cancel_filter_link = submit_uri; } window.location.href = cancel_filter_link; } return false; }); }; return this; }).call(icms.forms || {},jQuery);
console.log('Yo');
Все, метод выполняется из вашего core2.js
Можете убедиться, модифицировав метод в core.js тем же console.log, но с другим текстом. Оно не будет выведено.
Не забывайте после изменений увеличивать счетчик во вкладке Интерфейс Настроек сайта, чтобы браузер грузил ваши измененные файлы, а не из кеша.
core2.js?1588336299:32 Uncaught ReferenceError: _this is not defined
at HTMLInputElement.change (core2.js?1588336299:32)
at HTMLInputElement.dispatch (jquery.js?1588336299:3)
at HTMLInputElement.r.handle (jquery.js?1588336299:3)
У меня версия v2.13.1, дефолтный шаблон.
Получилось добиться нормальной работы только путем добавления всех методов и свойств, а не только нужного для модификации
icms.forms = (function ($) { Полностью все методы и свойства }).call(icms.forms || {},jQuery);
icms.forms.initFilterForm = function(selector){ // тут пишите что хотите };
Замените _this в методе на icms.formsЕсли этот метод оставить без изменений, то ошибка та же, ругается на свойство _this.