Фильтрация товаров на опенкарт без перезагрузки страницы
Вообще, говоря, данную фильтрацию можно осуществить для практически любого интернет-магазина на любой кмс, но мы рассмотрим пример фильтрации по цене именно для опенкарт, так как для данная система довольно капризна к совместимости дополнений, да и найти бесплатно их не так уж и просто. Да и интересно же самим реализовать, так как это несложно.
Итак, есть у нас вот такой шаблон, с вот таким ползунком:
Верстка тут будет до безобразия проста:
Цена <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 - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Программы на заказ
Отзывы
Контакты