Фильтрация товаров по наличию в OpenCart

Количество просмотров: 292

Итак, сегодня мы будем решать следующую проблему: на сайте с OpenCart-ом не работает фильтрация товаров по наличию.

При отметке чекбокс-фильтра урл меняется следующим образом: происходит редирект с урла вида http://адрес_сайта/index.php?route=product/category&path=x_y_z на http://адрес_сайта/index.php?route=product/category&path=x_y_z&availability=true, то есть GET-параметр availability сообщает о работе фильтра. Выборка действительно происходит, но попробуем вывести обратно все товары. Убираем отметку на чекбоксе, урл меняется http://адрес_сайта/index.php?route=product/category&path=x_y_z&availability=false и ничего не происходит.

Проблема заключается все в том же GET-параметре availability, его быть не должно. Для решения напишем следующий код:


	$(".filter-checkbox input[type='checkbox']").on('click', function() {
	    var u = new Url(document.location.href);
		if ($(this).is(":checked")) {
			u.query.availability = true;
		} else {
                      var d = location.href.split("#")[0].split("?");
                      var base = d[0];
                      var query = d[1];
                      var res = '';
                      if(query)
                      {
                          var params = query.split("&");
                          (var i = 0; i < params.length; i++)
                          {
                               var keyval = params[i].split("=");
                               if(keyval[0] !== 'availability')
                               {
                                   console.log(keyval[0]+' '+params[i]);
                                   res += params[i]+'&';
                               }
                          }
                          res = res.substr(0,res.length-1);
                       }
                       u = base+'?'+res;
	        }
		location = u.toString();
	});

Рассмотрим поподробнее наш скрипт. Для начала вешаем обработчик на наш чекбокс, отслеживать будем клик по элементу. Далее получаем урл текущей страницы:

var u = new Url(document.location.href);
Если чекбокс был отмечен, то добавляем GET-параметр:
u.query.availability = true;
Если же мы снимаем отметку чекбокса, то выполняется следующий код:


                      // разделяем урл на адрес и строку параметров
                      var d = location.href.split("#")[0].split("?");
                      var base = d[0];
                      var query = d[1];
                      // переменная результирующего  урл
                      var res = '';
                      // если строка параметров существует
                      if(query)
                      {
                      // то разбиваем по символу & на пары параметр-значение
                          var params = query.split("&");
                      // в цикле перебираем каждую такую пару
                          (var i = 0; i < params.length; i++)
                          {
                      // из пары выбираем отдельно параметр и его значение
                               var keyval = params[i].split("=");
                      // если в урл встречается параметр с именем availability, что свидетельствует о работе фильтра, то его игнорируем, в противном случаем собираем пары параметр-значение в одну строку
                               if(keyval[0] !== 'availability')
                               {
                                   console.log(keyval[0]+' '+params[i]);
                                   res += params[i]+'&';
                               }
                          }
                      //между каждой парой мы вставляем символ &, последний символ & мы убираем при помощи функции substr
                          res = res.substr(0,res.length-1);
                       }
                      // далее собираем урл полностью из адреса сайта и получившейся строки
                       u = base+'?'+res;

Нам осталось только осуществить редирект на новый адрес

location = u.toString();

© 2015-2018 Goodweb.me --- Карта сайта --- info@goodweb.me

Наверх