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 отрабатывает неправильно.
Если есть замечания или предложения - пишите.