UMIhelp

Разработка сайта на UMI.CMS => Макросы UMI.CMS => Тема начата: sanya@lum.ru от 07 Октября 2013, 13:52:30

Название: задание интервала для фильтра
Отправлено: sanya@lum.ru от 07 Октября 2013, 13:52:30
Здравствуйте! Подскажите как можно реализовать поиск по числовому интервалу в фильтре при выборке товаров из каталога, например от 2 - 10 желательно чтобы цифры вводились в разных полях.
Может хотя бы направление в каком копать.
Название: Re:задание интервала для фильтра
Отправлено: sanya@lum.ru от 07 Октября 2013, 14:52:15
Спасибо всем. Нашел
<input name="fields_filter[{@name}][0]" value="{value_from}"
Название: Re:задание интервала для фильтра
Отправлено: admin от 08 Октября 2013, 17:07:34
Спасибо всем. Нашел
<input name="fields_filter[{@name}][0]" value="{value_from}"

как вы правильно заметили тут все зависит от имени input. Основа всегда одинакова fields_filter[{@name}], а дальше есть варианты:
[0] - значение "от"
[1] - значение "до"
и т.п.
Название: Re:задание интервала для фильтра
Отправлено: Axiomateria от 27 Ноября 2014, 00:46:44
В продолжении темы у меня такой вопрос:

Всё тот же шаблон с теми же полями и в моём случае фильтруем рост "от" минимального и "до" максимального посредством бегунка.
ОТ
<input type="text" name="fields_filter[{@name}][0]" value="{value_from}" readonly="readonly" class="range_field mod_1 inpMin_1" />
ДО
<input id="amount_1" type="text"  name="fields_filter[{@name}][1]" value="{value_to}" readonly="readonly" class="range_field mod_1 inpMax_1" />

Значение в поле value="{value_from}" выводится только после того, как бегунком воспользоваться, то есть значение размера (допустим ОТ  (минимальный) "150" и ДО (максимальный) "180") подставляются в  value="{value_from}" и value="{value_to}" соответственно уже при движении бегунком.
Но до того их минимальных и максимальных значений не видно в фильтре.

Как быть ?
Название: Re:задание интервала для фильтра
Отправлено: admin от 27 Ноября 2014, 09:59:49
я правильно понимаю, что у вас есть бегунок, созданный силами js, который отображает и сами бегунки ("от" и "до") и поля для ввода значения. При перемещении бегунков значения в полях меняется. Но при загрузке страницы, пока мы еще не трогали бегунки, в полях нет никаких значений.
Я все правильно описал?
Название: Re:задание интервала для фильтра
Отправлено: Axiomateria от 27 Ноября 2014, 11:34:19
я правильно понимаю, что у вас есть бегунок, созданный силами js, который отображает и сами бегунки ("от" и "до") и поля для ввода значения. При перемещении бегунков значения в полях меняется. Но при загрузке страницы, пока мы еще не трогали бегунки, в полях нет никаких значений.
Я все правильно описал?
ДА.
Совершенно точно - я забыл отметить, что бегунок на JS.
Название: Re:задание интервала для фильтра
Отправлено: admin от 27 Ноября 2014, 12:03:43
тогда вам надо в input, который отображает значение, вставлять либо value="{value_from}" либо минимальное значение (оно у вас в какой-то переменной наверняка хранится), если {value_from} пустой. То есть поставьте в xsl проверку через if и xsl:attribute

P.S. тоже самое с полем максимальное значение
Название: Re:задание интервала для фильтра
Отправлено: Axiomateria от 27 Ноября 2014, 12:28:25
тогда вам надо в input, который отображает значение, вставлять либо value="{value_from}" либо минимальное значение (оно у вас в какой-то переменной наверняка хранится), если {value_from} пустой. То есть поставьте в xsl проверку через if и xsl:attribute

P.S. тоже самое с полем максимальное значение
для "ОТ" я пробую такую вещь применить,
                    <input type="text" name="fields_filter[{@name}][0]" value="110" readonly="readonly" class="range_field mod_1 inpMin_1" />
                    <xsl:if test="value !=''">
                        <xsl:attribute name="value">
                            {value_from}
                        </xsl:attribute>
                    </xsl:if>

где value="110" видимое минимальное значение как бы по умолчанию, но оно не заменяется на другое значение при движении бегунка...
Видно, что я что-то не доделал в конструкции                    
 <xsl:if test="value !=''">
                        <xsl:attribute name="value">
                            {value_from}
                        </xsl:attribute>
                    </xsl:if>
Название: Re:задание интервала для фильтра
Отправлено: admin от 27 Ноября 2014, 12:44:57
Скорее всего, проблема в том, что xsl attribute действует на открытый выше тег, а у вас input закрыт. Надо так:
<input type="text" name="fields_filter[{@name}][0]" value="110" readonly="readonly" class="range_field mod_1 inpMin_1" >
                    <xsl:if test="value !=''">
                        <xsl:attribute name="value">
                            {value_from}
                        </xsl:attribute>
                    </xsl:if>
</input>
Название: Re:задание интервала для фильтра
Отправлено: Axiomateria от 27 Ноября 2014, 13:15:08
Скорее всего, проблема в том, что xsl attribute действует на открытый выше тег, а у вас input закрыт. Надо так:
<input type="text" name="fields_filter[{@name}][0]" value="110" readonly="readonly" class="range_field mod_1 inpMin_1" >
                    <xsl:if test="value !=''">
                        <xsl:attribute name="value">
                            {value_from}
                        </xsl:attribute>
                    </xsl:if>
</input>
Спасибо! Сработало.
Однако вот какой нюанс: при выводе результатов поиска по отфильтрованному значению роста посредством бегунка значение атрибута value так и остаётся видимым как изначальное "110".
То есть пользователь выбрал значение "ОТ" = 150 и в результате вывода ему товары вывелись от 150 и далее, но при этом пользователю показывается на бегунке прежнее значение "ОТ" = "110". Это я к тому, что пользователь может не понять, что ему результаты вывелись, которые он и отфильтровывал.
Как сделать так что бы при выводе результатов фильтрации по товарам показывалось уже то значение атрибута value, которое выбрал пользователь ?

Djn
Название: Re:задание интервала для фильтра
Отправлено: admin от 27 Ноября 2014, 13:29:05
либо  при генерации страницы ваш чыд код не подставляет value_from (тогда проверяйте условие), либо в js есть еще директивы которые выставляют значение всегда на начало (в js ползунки , иногда надо передавать значения для сдвигания ползунка)
Название: Re:задание интервала для фильтра
Отправлено: Axiomateria от 27 Ноября 2014, 13:45:29
либо  при генерации страницы ваш чыд код не подставляет value_from (тогда проверяйте условие)
Уверен, что именно здесь неувязочка
                    <xsl:if test="value !=''">
                        <xsl:attribute name="value">
                            {value_from}
                        </xsl:attribute>
                    </xsl:if>

value !=''" - всё-таки может быть вот с этим что-то не так ?..
.
либо в js есть еще директивы которые выставляют значение всегда на начало (в js ползунки , иногда надо передавать значения для сдвигания ползунка)

Вот они самые: по умолчанию ОТ = "110" и ДО "190"
$(function () {
   slider_f('#slider', '.inpMin_1', '.inpMax_1', 110, 190, 118, 182, 1);
   slider_f('#slider_2','.inpMin_2', '.inpMax_2', 0, 70000, 10000, 60200, 50);
});
Название: Re:задание интервала для фильтра
Отправлено: admin от 27 Ноября 2014, 15:46:48
Цитировать
value !=''" - всё-таки может быть вот с этим что-то не так ?..
.

это, вы можете проверить самостоятельно проверяя html страницы, который генерится в разных случаях (с фильтрами и без)

Цитировать
Вот они самые: по умолчанию ОТ = "110" и ДО "190"
$(function () {
   slider_f('#slider', '.inpMin_1', '.inpMax_1', 110, 190, 118, 182, 1);
   slider_f('#slider_2','.inpMin_2', '.inpMax_2', 0, 70000, 10000, 60200, 50);
});

Вот, нет ли среди этого js инструкции, которая говорит, при инициализации выстави значение в полях и ролики ОТ = "110" и ДО "190" соответственно
Название: Re:задание интервала для фильтра
Отправлено: Axiomateria от 27 Ноября 2014, 17:57:16
Цитировать
Вот они самые: по умолчанию ОТ = "110" и ДО "190"
$(function () {
   slider_f('#slider', '.inpMin_1', '.inpMax_1', 110, 190, 118, 182, 1);
   slider_f('#slider_2','.inpMin_2', '.inpMax_2', 0, 70000, 10000, 60200, 50);
});
Вот, нет ли среди этого js инструкции, которая говорит, при инициализации выстави значение в полях и ролики ОТ = "110" и ДО "190" соответственно

JS - вообще не мой конёк  ??? , файл полностью выглядит  вот так:

$(function () {
slider_f('#slider', '.inpMin_1', '.inpMax_1', 110, 190, 118, 182, 1);
slider_f('#slider_2','.inpMin_2', '.inpMax_2', 0, 70000, 10000, 60200, 50);
});
function slider_f(slider,inputMin,inputMax, valMin, valMax, valBegin, valEnd, steps) {
var $slider = $(slider),
$inputMin = $(inputMin),
$inputMax = $(inputMax);

$slider.slider({
min: valMin,
max: valMax,
values: [valBegin, valEnd],
range: true,
step: steps,
stop: function (event, ui) {
$inputMin.val($slider.slider("values", 0));
$inputMax.val($slider.slider("values", 1));

},
slide: function (event, ui) {
$inputMin.val($slider.slider("values", 0));
$inputMax.val($slider.slider("values", 1));
}
});

// фильтрация ввода в поля
$('input.range_field').keypress(function (event) {
var key, keyChar;
if (!event) var event = window.event;

if (event.keyCode) key = event.keyCode;
else if (event.which) key = event.which;

if (key == null || key == 0 || key == 8 || key == 13 || key == 9 || key == 46 || key == 37 || key == 39) return true;
keyChar = String.fromCharCode(key);

if (!/\d/.test(keyChar))    return false;

});
}
Название: Re:задание интервала для фильтра
Отправлено: admin от 27 Ноября 2014, 18:45:43
пусть не ваш, но попробуйте руками поменять значения 110 и 190 в вызове

 slider_f('#slider', '.inpMin_1', '.inpMax_1', 110, 190, 118, 182, 1);

что-то произойдет, а там уже будете думать как их туда подставить
Название: Re:задание интервала для фильтра
Отправлено: Axiomateria от 29 Ноября 2014, 12:13:17
В общем по разному попробовал, но всё же уже более уверенно думаю, что неувязка здесь:
                    <xsl:if test="value !=''">
                        <xsl:attribute name="value">
                            {value_from}
                        </xsl:attribute>
                    </xsl:if>
То есть  {value_from} не подставляется ни в каком случае - хоть двигай, хоть не двигай бегунок.

Вот так ещё попробовал:

                    <input type="text" name="fields_filter[{@name}][0]" value="{value_from}" readonly="readonly" class="range_field inpMin_2" />
                       <!--  <xsl:if test="value =''">
                            <xsl:attribute name="value">
                                110
                            </xsl:attribute>
                        </xsl:if>
                        <xsl:if test="value !=''">
                            <xsl:attribute name="value">
                                {value_from}
                            </xsl:attribute>
                        </xsl:if>
                    </input>

НО не получается ни как...
Название: Re:задание интервала для фильтра
Отправлено: Aisamiery от 31 Января 2015, 03:32:36
Хз актуально или нет, но меня смущает атрибут readonly у input что в переводе означает "не подлежит изменению"

А так всем на будущее совет: интерфейсы которые строятся при помощи js инициализируйте так же при помощи js ))