Smart Filter параметры input.min (max) о обновление

1

Добрый день проблема с плагином Smart filter. Фильтр в теме Дефаулт 3.0. При изменении параметров ОТ и ДО остальные характеристики которые не попадают под выбор становятся не активными (тут отрабатывает правильно). Но если сначала выбрать любую другую характеристику, а потом выставить фильтр (допустим цена) в значения не совпадающие с выбранным фильтром - получаем пустой поиск (товаров не найдено). То-есть параметры min и max в фильтрах ОТ и ДО не обновляются в зависимости от выбранных прочих характеристик .

Опубликовано: 27 декабря 2018

6 ответов

  • 1
    Eugen Nichikov Hardman DEV 27 декабря 2018 13:09 #

    Здравствуйте, Денис. Скиньте, пожалуйста ссылку на сайт (можно через форму в контактах) - посмотрю какие данные передаются в JS.

  • 1
    Денис Горлов 27 декабря 2018 13:11 #

    Вот тестовый вариант: https://new.gidtepla.ru/


  • 1
    Денис Горлов 27 декабря 2018 13:12 #

    Включенный фильтр можно глянуть:

    https://new.gidtepla.ru/category/teploizolyatsiya-...


  • 1
    Денис Горлов 27 декабря 2018 13:13 #

    Собираю на основе тем: Дефаулт 3.0 (фильтр полностью от нее), и Dymmy

  • 1
    Денис Горлов 27 декабря 2018 13:17 #

    Js отвечающий за фильтр:


    jQuery(function($) {
        //PRODUCT FILTERING
        var f = function () {
        
            var ajax_form_callback = function (f) {
                var fields = f.serializeArray();
                var params = [];
                for (var i = 0; i < fields.length; i++) {
                    if (fields[i].value !== '') {
                        params.push(fields[i].name + '=' + fields[i].value);
                    }
                }
                var url = '?' + params.join('&');
                $(window).lazyLoad && $(window).lazyLoad('sleep');
                $('#product-list').html('<div class="preload"></div>');
                $.get(url+'&_=_', function(html) {
                    var tmp = $('<div></div>').html(html);
                    $('#product-list').html(tmp.find('#product-list').html());
                    if (!!(history.pushState && history.state !== undefined)) {
                        window.history.pushState({}, '', url);
                    }
                    $(window).lazyLoad && $(window).lazyLoad('reload');
                    initLazy() //переинициализация подгрузки картинок после обновления результатов;
                    initPopup() // переинициализация сортировки после обновления результатов;
                    initScrollTop() // скрол вверх после обновления результатов;
                });
                
            };
        
            $('.filters .slider').each(function () {
                if (!$(this).find('.filter-slider').length) {
                    $(this).append('<div class="filter-wrapper"><div class="filter-slider"></div></div>');
                } else {
                    return;
                }
                var min = $(this).find('.min');
                var max = $(this).find('.max');
                var min_value = parseFloat(min.attr('placeholder'));
                var max_value = parseFloat(max.attr('placeholder'));
                var step = 1;
                var slider = $(this).find('.filter-slider');
                if (slider.data('step')) {
                    step = parseFloat(slider.data('step'));
                } else {
                    var diff = max_value - min_value;
                    if (Math.round(min_value) != min_value || Math.round(max_value) != max_value) {
                        step = diff / 10;
                        var tmp = 0;
                        while (step < 1) {
                            step *= 10;
                            tmp += 1;
                        }
                        step = Math.pow(10, -tmp);
                        tmp = Math.round(100000 * Math.abs(Math.round(min_value) - min_value)) / 100000;
                        if (tmp && tmp < step) {
                            step = tmp;
                        }
                        tmp = Math.round(100000 * Math.abs(Math.round(max_value) - max_value)) / 100000;
                        if (tmp && tmp < step) {
                            step = tmp;
                        }
                    }
                }
                slider.slider({
                    range: true,
                    min: parseFloat(min.attr('placeholder')),
                    max: parseFloat(max.attr('placeholder')),
                    step: step,
                    values: [parseFloat(min.val().length ? min.val() : min.attr('placeholder')),
                        parseFloat(max.val().length ? max.val() : max.attr('placeholder'))],
                    slide: function( event, ui ) {
                        var v = ui.values[0] == $(this).slider('option', 'min') ? '' : ui.values[0];
                        min.val(v);
                        v = ui.values[1] == $(this).slider('option', 'max') ? '' : ui.values[1];
                        max.val(v);
                    },
                    stop: function (event, ui) {
                        min.change();
                    }
                });
                min.add(max).change(function () {
                    var v_min =  min.val() === '' ? slider.slider('option', 'min') : parseFloat(min.val());
                    var v_max = max.val() === '' ? slider.slider('option', 'max') : parseFloat(max.val());
                    if (v_max >= v_min) {
                        slider.slider('option', 'values', [v_min, v_max]);
                    }
                });
            });
            $('.filters.ajax form input').change(function () {
                ajax_form_callback($(this).closest('form'));
            });
            $('.filters.ajax form').submit(function () {
                ajax_form_callback($(this));
                return false;
            });
        };
        f();
    });
  • 1
    Eugen Nichikov Hardman DEV 27 декабря 2018 16:20 #

    Воспроизвёл проблему: не передаются нужные максимальные и минимальные значения цены в слайдер после фильтрации. Исправлю в обновлении.


Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите