Не надо делать весь js в основном представлении.
Разрабатывайте с той точки зрения, чтобы фильтры и смену представления можно было вынести в отдельные независимые виджеты.
Виджет при этот сам по себе не занимается перезагрузкой контента страницы. Он только меняет состояние и уведомляет основную страницу о необходимости перезагрузки, это можно сделать либо через вызов функции основной страницы, либо через событие. В простейшем случае состояние можно хранить в виде глобальной переменной-объекта, которая потом в основном представлении будет собираться и отправляться в виде data в ajax-запросе.
Примерно так.
В представлении фильтра
Код: Выделить всё
$js = "
var checkboxes = [];
$('input[type=checkbox]').on('click', function(){
var selection = $(this).val();
var id = $(this)[0].id;
var check = $(this)[0].checked;
var value = id.split('-');
var data;
if(check){
checkboxes.push(selection + '-' + value[2]);
} else {
checkboxes.splice(checkboxes.indexOf(selection + '-' + value[2]), 1);
}
pageState['checkboxes'] = '".$searchModelName."[options]=' + checkboxes;
reloadContent();
});";
Код: Выделить всё
$js .= "
$('.item-view-select > span').on('click', function(){
pageState['itemView'] = 'itemViews=' + $(this).data('view_name');
reloadContent();
});
";
Код: Выделить всё
$js="
var pageState = {};
function reloadContent() {
var data = '';
$.each(pageState, function(key, value) {
data += '&' + value;
});
$.ajax({
type: 'POST',
url: '".$model->productscategory_url."',
data: data.substr(1),
success: function(result){
$('#lestview-products').html(result);
},
});
}";