UMIhelp

Разработка сайта на UMI.CMS => Шаблоны TPL => Тема начата: Masalkinn от 02 Октября 2011, 02:02:10

Название: Фильтре по цене.
Отправлено: Masalkinn от 02 Октября 2011, 02:02:10
Всем доброго времени суток!
Есть следующая задача, создать фильтр по цене от и до. Но в следующем формате:
Выпадающий список:
от 0 до 1500
от 1500 до 2500
от 2500 до 5000
и тд.
фильтр выводится через макрос %catalog search()%
в шаблоне создал
$FORMS['search_block_line_price'] = <<<END
<select name="price_range" class="textinputs"">
        <option selected=""  value="">цена</option>
        <option value="0 1500">0-1500</option>
        <option value="1500 2500">1500-2500</option>
        <option value="2500 5000">2500-5000</option>
        </select>
       
        <input type="hidden"  name="fields_filter[price][0]" value=""/>
        <input type="hidden"  name="fields_filter[price][1]" value=""/>

Как видит инпуты скрыты от глаз пользователей. Возник вопрос как из <option value="0 1500"> подставить значения в эти инпуты.
Маюсь уже часов 7, никак не могу решить проблему.
Может кто реализовывал уже такое?
Или может у кого есть идеи?
Спасибо!
Название: Re:Фильтре по цене.
Отправлено: admin от 02 Октября 2011, 11:25:44
тебе надо передать значение выбранного элемента из выпадающего списка в скрытые поля, если ты четко знаешь эти диапазоны то можно просто прописать ручками.

то есть на событие выбора элемнета списка повесить js функцию которая либо делить полученное значение на 2 числа и подставляет их (тогда значение списка будет выглядеть так "1500 2500" или "1500,2500" чтобы js мог эту строчку распарсить на 2 числа) либо отказаться от парсинга, а задавать в выпадающем списке в значении чисто 1,2 или 3 а в js функции ставить ему в соответствие пару чисел. я бы делал 2 вариант (хотя первый ничуть не хуже)

получилось бы примерно так
где-то выше прописываешь js функцию (так как она использует jQuery функции, не забудь проверить чтобы jQuery была подключена)
function put_price_value(value) {
var matrix = [ [0,1500], [1500,2500], [2500,5000] ],
              index=parseInt(value) - 1;
        jQuery('#price0').val(matrix[index][0]);
        jQuery('#price1').val(matrix[index][1]);
}

а html получается такой:
<select name="price_range" onchange="put_price_value(this.options[this.selectedIndex].value)" class="textinputs"">
        <option selected=""  value="">цена</option>
        <option value="1">0-1500</option>
        <option value="2">1500-2500</option>
        <option value="3">2500-5000</option>
</select>
       
        <input type="hidden"  id="price0" name="fields_filter[price][0]" value=""/>
        <input type="hidden"  id="price1" name="fields_filter[price][1]" value=""/>
Название: Re:Фильтре по цене.
Отправлено: korogan от 08 Ноября 2011, 21:51:23
А как это реализовать в XSLT
Требуется на главной странице сделать фильтр по цене такого плана как описанно выше
Название: Re:Фильтре по цене.
Отправлено: admin от 09 Ноября 2011, 02:57:01
все точно также, таже js функция которая парсит содержимое выбранного option в выпадающем списке, можете использовать мою js
function put_price_value(value) {
var matrix = [ [0,1500], [1500,2500], [2500,5000] ],
              index=parseInt(value) - 1;
        jQuery('#price0').val(matrix[index][0]);
        jQuery('#price1').val(matrix[index][1]);
}

можете написать свою которая будет принимать строку с 2 числами и парсить её на 2 числа, тут уж как вам удобнее
Название: Re:Фильтре по цене.
Отправлено: korogan от 24 Мая 2012, 19:20:19
Не могу понять как будет все выглядеть если ценовые значения следующие:
[1,500], [501,1000], [1001,1500], [1501,2000], [2001,3000], [3000,100000]

Подскажите пожалуйста

И еще проблема, если в форме присутствует значение size="1" Фильтрация не происходит.

<dl class="selectContainer">
<dt><label for="itemPrice">Подбор по ценовой категории:</label></dt>
<dd>
<select name="itemPrice" size="1" class="selectbox" id="itemPrice" name="price_range" onchange="put_price_value(this.options[this.selectedIndex].value)" class="textinputs"">
<option value="1">0-1500</option>
<option value="2">1500-2500</option>
<option value="3">2500-5000</option>
</select>
<input type="hidden"  id="price0" name="fields_filter[price][0]" value=""/>
<input type="hidden"  id="price1" name="fields_filter[price][1]" value=""/>
</dd>
</dl>
Название: Re:Фильтре по цене.
Отправлено: korogan от 02 Июля 2012, 10:36:43
_http://pro-busy.ru.xsph.ru/shop/avtorskie_ukrasheniya/busy/

Так и не получилось решить данную проблему.
Помогите пожалуйста в решении данной проблемы.
Отказывается работать, очень прошу о помощи
Название: Re:Фильтре по цене.
Отправлено: admin от 03 Июля 2012, 08:54:50
У вас все бы работало с исппользованием js кода написанного выше, но так как у вас используется NiceForm js плагин, то он уже подменяет оригинальный select на совокупность div, ul и т.п. элементов придавая им нужный вид. Поэтому функция onchange="put_price_value(this.options[this.selectedIndex].value)" прописанная вами к select игнорируется ,так как js плагин сам подставляет новые обработчики и пользователь выбирает уже ul элемент, а событие onchange у скрытого элемента select не наступит никогда.

Поэтому, если вы хотите добавить свой js обработчик, который разбивает выбранное в выпадающем списке значение на 2 составляющих и записывает их в скрытые поля
<input type="hidden"  id="price0" name="fields_filter[price][0]" value=""/>
<input type="hidden"  id="price1" name="fields_filter[price][1]" value=""/>

надо лезть в плагин NiceForm искать там обработчик события выбора выпадающего списка и добавлять уже там все манипуляции по разбивке значения цена на 2 скрытых поля
Название: Re:Фильтре по цене.
Отправлено: korogan от 04 Июля 2012, 13:08:09
Очень прошу о помощи.
2 дня ковырял этот скрипт, но так ни чего не добился.
Подскажите пожалуйста
Название: Re:Фильтре по цене.
Отправлено: admin от 05 Июля 2012, 12:32:36
скиньте файл js'ки, которая изменяет select'ы
Название: Re:Фильтре по цене.
Отправлено: korogan от 05 Июля 2012, 12:47:06
Прикрепил JS