UMIhelp

Разработка сайта на UMI.CMS => Шаблоны TPL => Тема начата: chutovo_kram от 20 Мая 2014, 18:18:44

Название: Сортировка товаров с помощью select
Отправлено: chutovo_kram от 20 Мая 2014, 18:18:44
Всем привет.
Пробую сделать фильтр с выпадающим списком (соритровка по убыванию и по возрастанию). Товары я получаю через макрос %data doSelection%. Вопрос: как вызвать макрос при нажатии на элемент option? Как привязать макрос к этому действию?
Название: Re:Сортировка товаров с помощью select
Отправлено: admin от 21 Мая 2014, 09:23:51
Для начала, фильтрация и сортировка - это разные термины.

Теперь по поводу сортировки элементов, которые выводятся через макрос %data doSelection()%.

В случaе, если вы работает с usel протоколом, то вам необходимо в usel файл добавить параметры, которые будет задавать название поля  и направление для сортировки ( (см. документацию (http://dev.docs.umi-cms.ru/shablony_i_makrosy/xslt-shablonizator_umi_cms/vyborki_iz_bd_protokol_usel/#giveParams))).

Пример usel файла для вывода всех товаров с определенной сортировкой:
<?xml version="1.0" encoding="utf-8"?>
<selection>
<target result="pages">
<type module="catalog" method="object" />
</target>
<sort order="{2}">{1}</sort>
</selection>

Теперь, при вызове макроса doSelection, мы можем передать параметр 1 и 2.


Нам осталось сделать так, чтобы при выборе выпадающего списка система передавала макросу doSelection параметры сортировки.

Сделаем это так:
1. создадим js обработчик, который при выборе значения из выпадающего списка для сортировки будет перегружать страницу с заданными параметрами
<select onchange="this.options[this.selectedIndex].value && (window.location = this.options[this.selectedIndex].value);">
    <option value="">Select...</option>
    <option value="?field_name=price&order=ascending">Цена по возрастанию</option>
    <option value="?field_name=price&order=descending">Цена по убыванию</option>
</select>
2. при загрузке страницы с макросом doSelection будем подхватывать параметры из адресной строки (пример параметров ?field_name=price&order=descending) и передавать их в макрос. Для этого добавим макрос в файл /classes/modules/custom.php
public function getReq($name) {
$value = getRequest($name);
return $value;
}

3. И сделаем вызов этого макроса при вызове doSelection для передачи параметров
%data doSelection('usel_tpl', usel_file , %custom getReq(field_name)%,  %custom getReq(order)%)%


P.S. все примеры писались тут же без проверки, так что могут мелкие баги, но суть ясна и направление задано, пробуйте.
Название: Re:Сортировка товаров с помощью select
Отправлено: chutovo_kram от 29 Мая 2014, 14:24:32
Спасибо огромное, извините, что долго не отвечал. Почитал форум и сделал через выборку с usel с помощью ajax.
Название: Re:Сортировка товаров с помощью select
Отправлено: admin от 29 Мая 2014, 14:33:58
Это прекрасный результат  ;)