Задача у меня стояла связать умный фильтр и вывод списка новостей
в первом компоненте bitrix:catalog.smart.filter
добавляем
"INSTANT_RELOAD" => "Y",//обновлять при выборе
"AJAX_MODE" => "Y",//использовать ajax
во втором компоненте bitrix:news.list
"AJAX_MODE" => "Y",
в шаблоне компонента вверху добавляю id="compare-refresh"
...
$this->setFrameMode(true);
?>
<span id="compare-refresh"></span>
...
и теперь идём в шаблон bitrix:catalog.smart.filter и открываем script.js, ищем функцию JCSmartFilter.prototype.postHandler = function (result, fromCache) (примерно 160 строка у меня)
после this.cacheKey = ''; перед закрытием функции добавляем
let componenturl = removeParam('bxajaxid', url);//удаляем из url параметр bxajaxid
let compid = $("#compare-refresh").parent().prop('id');//ищем у второго компонента id там запсан его bxajaxid BX.ajax.insertToNode(componenturl+'&bxajaxid='+compid.replace("comp_", ""), compid);//собственно сам запрос который обновит компонент
и ниже добавляем функцию очистки параметра из url
function removeParam(key, sourceURL) {
var splitUrl = sourceURL.split('?'),
rtn = splitUrl[0],
param,
params_arr = [],
queryString = (sourceURL.indexOf("?") !== -1) ? splitUrl[1] : '';
if (queryString !== '') {
params_arr = queryString.split('&');
for (var i = params_arr.length - 1; i >= 0; i -= 1) {
param = params_arr[i].split('=')[0];
if (param === key) {
params_arr.splice(i, 1);
}
}
rtn = rtn + '?' + params_arr.join('&');
}
return rtn;
}
вот как выглядит у меня
Комментариев нет:
Отправить комментарий