Не работает сортировка по алфавиту и рейтингу
Подскажите пожалуйста, правильно я понимаю, что здесь нет ссылки на сниппет?
Как создать правильно новый сниппет для сортировки по алфавиту?
Как создать правильно новый сниппет для сортировки по алфавиту?
<a href="[[~[[*id]]? &sortbyTVType=`integer` &sortbyTV=`rating` &sortdirTV=`DSC`]]"><img src="images/new/rating.png" alt="Сортировка по рейтингу" title="Сортировать по рейтингу"/></a>
<a href="[[~[[*id]]? &sortbyTVType=`integer` &sortbyTV=`pagetitle` &sortdirTV=`ASC`]]"><img src="images/new/ASC.png" alt="Сортировка от А до Я" title="Сортировать от А до Я"/></a>
<a href="[[~[[*id]]? &sortbyTVType=`integer` &sortbyTV=`pagetitle` &sortdirTV=`DSC`]]"><img src="images/new/DSC.png" alt="Сортировка от Я до А" title="Сортировать от Я до А"/></a>
Комментарии: 2
Понимаете правильно, это какая-то каша.
Допустим, у вас есть сниппет pdoResources на странице вида site.ru/catalog. Ссылки с заранее определенными способами фильтрации будут выглядеть примерно вот так:
site.ru/catalog?sortby=rating&dir=ASC
site.ru/catalog?sortby=pagetitle&dir=DESC
… и так далее.
Все, что идет после site.ru/ — это get-параметр ссылки и его нам необходимо перехватывать, чтобы отдавать сниппету, выводящему ресурсы.
Мы можем создать простой сниппет GET со следующим содержанием:
И вместе с данным сниппетом преобразовывать вывод ресурсов на странице примерно таким образом:
[[!pdoResources? &sortby=`[[!GET:default=`pagetitle`? &get=`sortby`]]` &sortdir=`[[!GET:default=`DESC`? &get=`dir`]]`]]
Минус данного решения в том, что пользователь может вбить свое значение в адрес ссылки, допустим: site.ru/catalog?sortby=TEST&dir=BANAN, в результате чего на странице сниппет вернет ошибку.
Поэтому, напишем свой сниппет pdoResourcesWithSort:
Вызывается как-то так: [[!pdoResourcesWithSort? &sortbyGet=`sortby` &sortdirGet=`dir`]]
Допустим, у вас есть сниппет pdoResources на странице вида site.ru/catalog. Ссылки с заранее определенными способами фильтрации будут выглядеть примерно вот так:
site.ru/catalog?sortby=rating&dir=ASC
site.ru/catalog?sortby=pagetitle&dir=DESC
… и так далее.
Все, что идет после site.ru/ — это get-параметр ссылки и его нам необходимо перехватывать, чтобы отдавать сниппету, выводящему ресурсы.
Мы можем создать простой сниппет GET со следующим содержанием:
<?php
return $_GET[$get];
И вместе с данным сниппетом преобразовывать вывод ресурсов на странице примерно таким образом:
[[!pdoResources? &sortby=`[[!GET:default=`pagetitle`? &get=`sortby`]]` &sortdir=`[[!GET:default=`DESC`? &get=`dir`]]`]]
Минус данного решения в том, что пользователь может вбить свое значение в адрес ссылки, допустим: site.ru/catalog?sortby=TEST&dir=BANAN, в результате чего на странице сниппет вернет ошибку.
Поэтому, напишем свой сниппет pdoResourcesWithSort:
<?php
//получаем значение требуемых get-параметров
$sortby = $_GET[$sortbyGet];
$sortdir = $_GET[$sortdirGet];
//сверяем их со списком разрешенных полей для сортировки (дополнить по вкусу)
$allowSortBy = array('pagetitle', 'publishedon', 'createdon');
if (!in_array($sortby, $allowSortBy)) {
//если совпадений нет - выставляем значение сортировки по умолчанию
$sortby = 'pagetitle';
}
$allowSortDir = array('ASC', 'DESC');
if (!in_array($sortdir, $allowSortDir)) {
$sortdir = 'ASC';
}
//теперь вызываем pdoResources с отфильтрованными параметрами сортировки
//дописать требуемые параметры вызова сниппета при необходимости
$pdoParams = array();
$pdoParams['sortby'] = $sortby;
$pdoParams['sortdir'] = $sortdir;
//возвращаем результат выполнения сниппета
return $modx->runSnippet('pdoResources', $pdoParams);
Вызывается как-то так: [[!pdoResourcesWithSort? &sortbyGet=`sortby` &sortdirGet=`dir`]]
А можно и так:
[[!pdoPage?
&class=`geodata`
&loadModels=`geodata`
&sortby=`[[!#GET.sortby:is=`city_name`:or:is=`country_name`:then=`[[!#GET.sortby]]`:else=`city_name`]]`
&sortdir=`[[!#GET.sortdir:is=`asc`:or:is=`desc`:then=`[[!#GET.sortdir]]`:else=`asc`]]`
]]
[[!pdoPage?
&class=`geodata`
&loadModels=`geodata`
&sortby=`[[!#GET.sortby:is=`city_name`:or:is=`country_name`:then=`[[!#GET.sortby]]`:else=`city_name`]]`
&sortdir=`[[!#GET.sortdir:is=`asc`:or:is=`desc`:then=`[[!#GET.sortdir]]`:else=`asc`]]`
]]
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.