1. Копируем шаблон умного фильтра в папку шаблона сайта
В файле script.js вносим следующие изменения:
Т.е. вносим следующие изменения:
Далее, в самом конце, перед }, добавляем вызов коллбэка в функциюJCSmartFilter.prototype.updateItem
Находим функцию JCSmartFilter.prototype.postHandler
После
Вставляем
Таким образом появляется 2 коллбэка:
Открываем файл template.php шаблона компонента умного фильтра в самом низу находим создание объекта JCSmartFilter:
И вносим следующие изменения:
Теперь необходимо включить режим AJAX для компоненты, которая выводит список элементов (news.list или catalog.section)
На данный момент была замечена только 1 проблема - фильтрация не работает при включенном режиме правки, это происходит из-за того, что добавляют div'ы, которые оборачивают список элементов, в следствии чего, javascript отрабатывает неправильно.
Если есть замечания или предложения - пишите.
В файле script.js вносим следующие изменения:
function JCSmartFilter(ajaxURL, viewMode, params, callbacks) { this.ajaxURL = ajaxURL; this.form = null; this.timer = null; this.cacheKey = ''; this.cache = []; this.viewMode = viewMode; this.callbacks = { afterUpdateItem: null, afterUpdateAllItems: null }; if (params && params.SEF_SET_FILTER_URL) { this.bindUrlToButton('set_filter', params.SEF_SET_FILTER_URL); this.sef = true; } if (params && params.SEF_DEL_FILTER_URL) { this.bindUrlToButton('del_filter', params.SEF_DEL_FILTER_URL); } if (callbacks) { if (callbacks.afterUpdateItem && typeof(callbacks.afterUpdateItem) == 'function') { this.callbacks.afterUpdateItem = callbacks.afterUpdateItem; } if (callbacks.afterUpdateAllItems && typeof(callbacks.afterUpdateAllItems) == 'function') { this.callbacks.afterUpdateAllItems = callbacks.afterUpdateAllItems; } } } |
Т.е. вносим следующие изменения:
- Добавляем аргумент callbacks
- Добавляем параметр объекта
this.callbacks = { afterUpdateItem: null, afterUpdateAllItems: null };
- Определяем установлены ли коллбэки:
if (callbacks) { if (callbacks.afterUpdateItem && typeof(callbacks.afterUpdateItem) == 'function') { this.callbacks.afterUpdateItem = callbacks.afterUpdateItem; } if (callbacks.afterUpdateAllItems && typeof(callbacks.afterUpdateAllItems) == 'function') { this.callbacks.afterUpdateAllItems = callbacks.afterUpdateAllItems; } }
Далее, в самом конце, перед }, добавляем вызов коллбэка в функциюJCSmartFilter.prototype.updateItem
if (this.callbacks.afterUpdateItem && typeof(this.callbacks.afterUpdateItem) == 'function') { this.callbacks.afterUpdateItem(this); } |
Находим функцию JCSmartFilter.prototype.postHandler
После
for(var PID in result.ITEMS) { if (result.ITEMS.hasOwnProperty(PID)) { this.updateItem(PID, result.ITEMS[PID]); } } |
Вставляем
if (this.callbacks.afterUpdateAllItems && typeof(this.callbacks.afterUpdateAllItems) == 'function') { this.callbacks.afterUpdateAllItems(this, result); } |
Таким образом появляется 2 коллбэка:
- После обновления 1 элемента фильтра
- После обновления всех элементов
Открываем файл template.php шаблона компонента умного фильтра в самом низу находим создание объекта JCSmartFilter:
var smartFilter = new JCSmartFilter('<?echo CUtil::JSEscape($arResult["FORM_ACTION"])?>', '<?=CUtil::JSEscape($arParams["FILTER_VIEW_MODE"])?>', <?=CUtil::PhpToJSObject($arResult["JS_FILTER_PARAMS"])?>}); |
И вносим следующие изменения:
var smartFilter = new JCSmartFilter('<?echo CUtil::JSEscape($arResult["FORM_ACTION"])?>', '<?=CUtil::JSEscape($arParams["FILTER_VIEW_MODE"])?>', <?=CUtil::PhpToJSObject($arResult["JS_FILTER_PARAMS"])?>,{ afterUpdateAllItems: function(filter, result){ if (!!document.querySelectorAll('.bx_catalog_list_home')[0]) //вместо селектора .bx_catalog_list_home используйте свой, дабы избежать ошибки { var itemBlock = document.querySelectorAll('.bx_catalog_list_home')[0]; //также используйте свой селектор var itemBlockParent = itemBlock.parentNode, compID; if (itemBlockParent.getAttribute('id').indexOf('comp_') > -1) { compID = itemBlockParent.getAttribute('id').replace(/comp_/g, ''); BX.ajax.insertToNode(result.FILTER_AJAX_URL+'?bxajaxid='+compID, itemBlockParent.getAttribute('id')); } } }, }); |
Теперь необходимо включить режим AJAX для компоненты, которая выводит список элементов (news.list или catalog.section)
На данный момент была замечена только 1 проблема - фильтрация не работает при включенном режиме правки, это происходит из-за того, что добавляют div'ы, которые оборачивают список элементов, в следствии чего, javascript отрабатывает неправильно.
Если есть замечания или предложения - пишите.