Помощь Неправильно работает фильтр-ползунок Moguta 9.0.0

ign81

Premium+
Регист
2 Апр 2019
Сообщения
19
Симпатии
3
#1
Скопировал с форума могуты (там все тухло).
Фильтр-ползунок, если характеристики записывать дробными числами неправильно работает. Проверил на тестовом сайте Главная

Порядок действий, например для товаров категории "Двери":
1. Изменил характеристику товаров "Толщина полотна": Использовать в фильтрах = да, Тип отображения в фильтре = Ползунок.
2. Добавил дробные значения характеристики из п.1 для товаров категории "Двери".
3. На странице фильтров отображение нормальное:
4. На странице категории в фильтрах движение ползунка только по целым числам (естественно передвинуть к краям ползунок не выходит):

Попробовал решить проблему в файле "mg-templates\moguta\components\filter\filter.js", заменил в коде:
PHP:
        // Собираем слайдер с ползунками для всех характеристик
        $(".mg-filter-item .mg-filter-prop-slider").each(function (i) {

            var min = parseInt($(this).data("min"));
            var max = parseInt($(this).data("max"));

            var fMin = (parseInt($(this).data("factmin"))) ? parseInt($(this).data("factmin")) : min;
            var fMax = (parseInt($(this).data("factmax"))) ? parseInt($(this).data("factmax")) : max;

            var sliderEl = $(this);
            var minInput = $("input#Prop" + $(this).data("id") + "-min");
            var maxInput = $("input#Prop" + $(this).data("id") + "-max");
            var step = max / 10;

            // Создаем ползунок
            $(this).slider({
                min: min,
                max: max,
                values: [fMin, fMax],
                step: 1,
                range: true,
                stop: function (event, ui) {
                    minInput.val(sliderEl.slider("values", 0));
                    maxInput.val(sliderEl.slider("values", 1));
                    getFilteredItems(maxInput);
                },
                slide: function (event, ui) {
                    minInput.val(sliderEl.slider("values", 0));
                    maxInput.val(sliderEl.slider("values", 1));
                }
            });

            // Создаем крючок для ввода из полей
            minInput.change(function () {
                var value1 = minInput.val();
                var value2 = maxInput.val();

                // Если значение ускакало за пределы
                if (parseInt(value1) > parseInt(value2)) {
                    value1 = value2;
                    minInput.val(value1);
                }
                sliderEl.slider("values", 0, value1);
                getFilteredItems(maxInput);
            });

            maxInput.change(function () {
                var value1 = minInput.val();
                var value2 = maxInput.val();

                if (parseInt(value1) > parseInt(value2)) {
                    value2 = value1;
                    maxInput.val(value2);
                }
                sliderEl.slider("values", 1, value2);
                getFilteredItems(maxInput);
            });
        });
Следующие значения:
parseInt на parseFloat
step: 0.001
Вроде сработало, но правая граница ползунка неверно выставляется при попытке возврата к исходному значению (округляется в меньшую сторону), т.е. достичь правой границы движением ползунка не получается.
Также было бы лучше если бы перед выводом ползунка в фильтрах шла проверка на целые или дробные числа. При дробных числах - проверка разрядности (исходя из этого выставлять шаг ползунка step = 0.1 или step = 0.01 и т.д).

Может кто поможет решить проблему?
 
Сверху Снизу