Убираем Ajax с выбора пунктов у фильтра и переделываем на кнопку в CS-Cart


В CS-Cart фильтр реализован так, что если выбрать хоть один пункт в нём, сразу идёт фильтрация. Если в магазине много товаров или хостинг недостаточно мощный, то это всё происходит довольно долго, чтобы получить нужный результат + лишняя нагрузка, так как при каждом выборе идёт обращение к базе. В данной статье будет описано как сделать так, чтобы при выборе пункта в стандартном фильтре не происходила сразу фильтрация, а срабатывала при нажатии на кнопку.

Для начала, нужно скопировать JavaScript файл стандартного фильтра в свой модуль, в котором мы и будем менять метод фильтрации. Это необходимо, чтобы при обновлении движка ничего не слетело.
Берём файл product_filters.js в папке js/tygh/ и копируем в папку своего модуля js/addons/ваш_модуль/product_filters.js
Далее в этой файле находим функцию function setHandler()

var tempfilterarr=''; // Создаём переменную, в которой будет хранится набор выбранных пунктов для фильтра
function setHandler() {
	$(_.doc).on('change', '.cm-product-filters-checkbox', function () {
		if (no_trigger) {
			return false;
		}

		var self = $(this);
		var container = self.parents('.cm-product-filters');

		//return getProducts($.attachToUrl(base_url, 'features_hash=' + generateHash(container)), self); - Комментируем или удаляем данную строку

		tempfilterarr=$.attachToUrl(base_url, 'features_hash=' + generateHash(container)), self; // Добавляем в нашу переменную выбранные пункты в фильтре
	});
}

// Далее пишем обработку на нажатие кнопки для применения фильтра
$('body').on('click','#gul-catalog-filter-submit',function(){ // Селектор может быть любой
	$(this).html('Показать'); // Меняем текст кнопки, это нужно для восстановления кнопки в исходное состояние
	if(tempfilterarr!='') // Если есть хоть один выбранный пункт в фильтре, передаётся выбранные пункты в фильтре в функцию для фильтрации
		return getProducts(tempfilterarr);
	else{ // Если же не выбран не один пункт, то у кнопки меняется текст на время
		$(this).html('Не выбран фильтр');
		var but=$(this);
		setTimeout(function() { but.html('Показать'); }, 3000);
	}
	tempfilterarr=''; 
});

И последнее, нам осталось лишь заменить подключение стандартного скрипта фильтра на наш и сделать кнопку. Всё это делается в файле templates/blocks/product_filters/original.tpl
Меняем строку {script src=»js/tygh/product_filters.js»} на {script src=»js/addons/ваш_модуль/product_filters.js»} .

В блоке <div class=»ty-product-filters__tools clearfix»> перед кнопкой сброса фильтра вставляем нашу кнопку <div id=»gul-catalog-filter-submit»>Показать</div>.

Вот и всё, осталось только прописать стили для кнопки.


Для связи

Если у вас появились какие-либо вопросы, хотите получить индивидуальный совет или у вас есть интересное предложение, вы можете связаться через форму обратной связи.

Или написать прямо на почту info@bobreod.ru





Отправляя форму, вы соглашаетесь с нашей политикой конфиденциальности