Фильтрация товаров на опенкарт без перезагрузки страницы


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

Итак, есть у нас вот такой шаблон, с вот таким ползунком:



Верстка тут будет до безобразия проста:

Цена
<br /><br />
До<span id="cen-polz">1280</span>
<br /><br />
</div>
<div id="polzunok-ob" class="polzunok-ob">
<img src="../image/polzunok-jur.png" id="polzunok"/>
</div>
Стили тоже:

<style>
#cen-polz{
float: right;
margin-right: 140px
}
.polzunok-ob {
  border-radius: 5px;
      background-image: url(../image/line1.png);
    background-position: -30px;
    background-size: 160% 300%;
    background-repeat: no-repeat;
    width: 200px;
    height: 5px;
    margin-left: -5px;
}
#polzunok {
  width: 40px;
  height: 40px;
  position: relative;
  left: 160px;
  top: -27px;
  cursor: pointer;
  z-index: 999;
}
</style>
А теперь самое интересное – обработчик этого ползунка на фильтр:

<script>
  var cen = document.getElementById('cen-polz');
    var sliderElem = document.getElementById('polzunok-ob');
    var thumbElem = sliderElem.children[0];
    thumbElem.onmousedown = function(e) {
      var thumbCoords = getCoords(thumbElem);
      var shiftX = e.pageX - thumbCoords.left;
      var sliderCoords = getCoords(sliderElem);
      document.onmousemove = function(e) {
        var newLeft = e.pageX - shiftX - sliderCoords.left;
        if (newLeft < 0) {
          newLeft = 0;
        }
        var rightEdge = sliderElem.offsetWidth - thumbElem.offsetWidth;
        if (newLeft > rightEdge) {
          newLeft = rightEdge;
        }
        thumbElem.style.left = newLeft + 'px';
		cen.innerHTML = newLeft*8;
		var cenprom = parseInt(newLeft*8);
		for (i=0; i<30;i++) {
		var elem = jQuery('.col-w1-4 .price:eq('+i+')');
		var elem2 = jQuery('.col-w1-4:eq('+i+')');	
		if (parseInt((jQuery(elem).text().trim().substring(0, jQuery(elem).text().trim().length - 3))) > cenprom ) {
		jQuery(elem2).css('display','none');
		}
		else {	jQuery(elem2).css('display','inline-block');}	
		}		
      }
      document.onmouseup = function() {
        document.onmousemove = document.onmouseup = null;
      };
      return false; // disable selection start (cursor change)
    };
    thumbElem.ondragstart = function() {
      return false;
    };
    function getCoords(elem) { // кроме IE8-
      var box = elem.getBoundingClientRect();
      return {
        top: box.top + pageYOffset,
        left: box.left + pageXOffset
      };
    }
  </script>
Сложного тут ничего нет, но все же стоит прояснить пару моментов. Итак, вначале мы получаем переменные по id,а затем пишем свой обработчик Drag’n’Drop (не забывая отключить встроенный в браузер).

Сама фильтрация происходит вот здесь:

for (i=0; i<30;i++) {
		var elem = jQuery('.col-w1-4 .price:eq('+i+')');
		var elem2 = jQuery('.col-w1-4:eq('+i+')');		
		if (parseInt((jQuery(elem).text().trim().substring(0, jQuery(elem).text().trim().length - 3))) > cenprom ) {
		jQuery(elem2).css('display','none');
		}
		else {	jQuery(elem2).css('display','inline-block');}		
		}
Мы считаем, что 30 товаров на странице и пробегаем по ним. Если цена в поле с классом price меньше текущей ползунка, то мы его скрываем. В данном случае потребовалось дополнительно избавиться от пробелов с помощью функции trim(), а также обрезать три последних символа с помощью функции substring() –чтобы получить чистое число, без p.

Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегизаметки, opencart, javascript




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Уроки по разработке WPF C#
Урок 4. Экземпляры и статические члены Java
Урок 10. Операторы побитового сдвига C#