<![CDATA[ Генератор ссылок для сортировки в дитто - My Forums]]> https://forums.modx.com/thread/?thread=62011 <![CDATA[Re: &#1043;&#1077;&#1085;&#1077;&#1088;&#1072;&#1090;&#1086;&#1088; &#1089;&#1089;&#1099;&#1083;&#1086;&#1082; &#1076;&#1083;&#1103; &#1089;&#1086;&#1088;&#1090;&#1080;&#1088;&#1086;&#1074;&#1082;&#1080; &#1074; &#1076;&#1080;&#1090;&#1090;&#1086;]]> https://forums.modx.com/thread/62011/#dis-post-366589 Quote from: designtorg at Jul 16, 2010, 01:32 PM

Очень интересно!
Давно ищу реализацию такой сортировки.
Покажите, пожалуйста, вывод всего этого.
Как пример: необходимо получить такое
[!Ditto? &sortBy=`pagetitle`!] <!-- По наименованию asc|desc -->
[!Ditto? &sortBy=`price`!] <!-- По цене asc|desc -->
[!Ditto? &sortBy=`artikul`!] <!-- По артикулу asc|desc -->

Спасибо
Передавать через $_POST]]>
antey Jul 17, 2010, 10:32 PM https://forums.modx.com/thread/62011/#dis-post-366589
<![CDATA[Re: &#1043;&#1077;&#1085;&#1077;&#1088;&#1072;&#1090;&#1086;&#1088; &#1089;&#1089;&#1099;&#1083;&#1086;&#1082; &#1076;&#1083;&#1103; &#1089;&#1086;&#1088;&#1090;&#1080;&#1088;&#1086;&#1074;&#1082;&#1080; &#1074; &#1076;&#1080;&#1090;&#1090;&#1086;]]> https://forums.modx.com/thread/62011/#dis-post-366588 Давно ищу реализацию такой сортировки.
Покажите, пожалуйста, вывод всего этого.
Как пример: необходимо получить такое
[!Ditto? &sortBy=`pagetitle`!] <!-- По наименованию asc|desc -->
[!Ditto? &sortBy=`price`!] <!-- По цене asc|desc -->
[!Ditto? &sortBy=`artikul`!] <!-- По артикулу asc|desc -->

Спасибо]]>
designtorg Jul 16, 2010, 08:32 AM https://forums.modx.com/thread/62011/#dis-post-366588
<![CDATA[Re: &#1043;&#1077;&#1085;&#1077;&#1088;&#1072;&#1090;&#1086;&#1088; &#1089;&#1089;&#1099;&#1083;&#1086;&#1082; &#1076;&#1083;&#1103; &#1089;&#1086;&#1088;&#1090;&#1080;&#1088;&#1086;&#1074;&#1082;&#1080; &#1074; &#1076;&#1080;&#1090;&#1090;&#1086;]]> https://forums.modx.com/thread/62011/#dis-post-366587 Но один PHx в данном случае не объяснил бы затеи, поэтому пришлось немного уйти в оффтоп...]]> D.SID Apr 10, 2009, 08:48 PM https://forums.modx.com/thread/62011/#dis-post-366587 <![CDATA[Re: &#1043;&#1077;&#1085;&#1077;&#1088;&#1072;&#1090;&#1086;&#1088; &#1089;&#1089;&#1099;&#1083;&#1086;&#1082; &#1076;&#1083;&#1103; &#1089;&#1086;&#1088;&#1090;&#1080;&#1088;&#1086;&#1074;&#1082;&#1080; &#1074; &#1076;&#1080;&#1090;&#1090;&#1086;]]> https://forums.modx.com/thread/62011/#dis-post-366586 aleksey.stepanov Mar 30, 2009, 06:47 AM https://forums.modx.com/thread/62011/#dis-post-366586 <![CDATA[&#1043;&#1077;&#1085;&#1077;&#1088;&#1072;&#1090;&#1086;&#1088; &#1089;&#1089;&#1099;&#1083;&#1086;&#1082; &#1076;&#1083;&#1103; &#1089;&#1086;&#1088;&#1090;&#1080;&#1088;&#1086;&#1074;&#1082;&#1080; &#1074; &#1076;&#1080;&#1090;&#1090;&#1086;]]> https://forums.modx.com/thread/62011/#dis-post-366585 0. Похоже, это не тот случай, где можно быстро передать конечный результат другому, дабы он не трахался столько времени smiley То, что я написал для себя вообще ужасно выглядит со стороны + заточено под конкретику, посему попробую передать суть на абстрактном примере. Возможно, у кого-то дойдут руки сделать что-то универсальное по похожему принципу.

Кривой способ сделать сортировку по нужным параметрам. Как сделать лучше - пока не ведаю.

1. Для примера возьму 4ре переменных:
$p = цена. Значения: любые, заданные в соотв. ТВ
$t = товар. Значения: любые, заданные в соотв. ТВ
$b = "сортировать ПО". Значения: pagetitle, id и прочий стандарт, а также ТВ
$s = прямая или обратная сортировка. Значения: 1,2.

Создаем сниппет, например "SortLink":
<?php
# Забираем нужные переменные из строки адреса
$p=$_GET[’p’];
$t=$_GET[’t’];
$s=$_GET[’s’];
$b=$_GET[’b’];

# Задаем плэйсхолдеры для сравнения и сохранения или смены сортировки "прямая/обратная"
$modx->setPlaceholder(’plb’,$b);
$modx->setPlaceholder(’pls’,$s);

# Возвращаем все значения переменных в ссылку, кроме переменных "b" и "s".
return ’<a href=[~[*id*]~]?p=’.$p.’&t=’.$t.’&b=’;
?>

2. Ссылка для сортировки по имени:
[[SortLink]]pagetitle[+phx:if=`[+plb+]`:is=`pagetitle`:and:if=`[+pls+]`:is=`2`:then=`&s=1>ИМЯ</a> &#8593;`+][+phx:if=`[+plb+]`:is=`pagetitle`:and:if=`[+pls+]`:is=`1`:then=`&s=2>ИМЯ</a> &#8595;`:or:if=`[+plb+]`:is=`pagetitle`:and:if=`[+pls+]`:is=``:then=`&s=2>ИМЯ</a> &#8595;`+][+phx:if=`[+plb+]`:isnot=`pagetitle`:then=`&s=[+pls+]>ИМЯ</a>`+]

Ссылка для сортировки по товару:
[[SortLink]]tovar[+phx:if=`[+plb+]`:is=`tovar`:and:if=`[+pls+]`:is=`2`:then=`&s=1>ТОВАР</a> &#8593;`+][+phx:if=`[+plb+]`:is=`tovar`:and:if=`[+pls+]`:is=`1`:then=`&s=2>ТОВАР</a> &#8595;`:or:if=`[+plb+]`:is=`tovar`:and:if=`[+pls+]`:is=``:then=`&s=2>ТОВАР</a> &#8595;`+][+phx:if=`[+plb+]`:isnot=`tovar`:then=`&s=[+pls+]>ТОВАР</a>`+]

Ссылка для сортировки по цене:
[[SortLink]]price[+phx:if=`[+plb+]`:is=`price`:and:if=`[+pls+]`:is=`2`:then=`&s=1>ЦЕНА</a> &#8593;`+][+phx:if=`[+plb+]`:is=`price`:and:if=`[+pls+]`:is=`1`:then=`&s=2>ЦЕНА</a> &#8595;`:or:if=`[+plb+]`:is=`price`:and:if=`[+pls+]`:is=``:then=`&s=2>ЦЕНА</a> &#8595;`+][+phx:if=`[+plb+]`:isnot=`price`:then=`&s=[+pls+]>ЦЕНА</a>`+]
* Проверяет порядок сортировки; если ссылка другая - сохраняет, если та же - меняет.

3. Предполагается что в сниппете вывода результатов поиска есть все для перехвата и обработки этих переменных. Как пример:
# если 2, то сортировка обратная, иначе прямая
if ($s == ’2’) { $s = ’DESC’; } else { $s = ’ASC’; }

# если "сортировать по" не задано - сортировать по заголовку страницы
if ($b == ’’) { $b = ’pagetitle’; }

# Задаем значения для поиска дитто
# Можно описать хоть 50 категорий товара
if ($t == ’elka’) { $elka = ’tovar,elka,1|’; }
if ($t == ’pihta’) { $pihta = ’tovar,pihta,1|’; }
if ($t == ’sosna’) { $sosna = ’tovar,sosna,1|’; }
# Задаем точное значение цены для поиска дитто, например "5000-10000"
$pr = ’price,$p,1|’;

# Склеиваем значения для поиска дитто (если нам нужен был поиск сразу по всем параметрам, например, магазина со всеми этими товарами)
$filter = $pr.$elka.$pihta.$sosna;
# Если поиск нужен только по одному из значений можно сделать проще:
# $to = ’tovar,$t,1|’;
# $filter = $pr.$to;

# Задаем параметры для Дитто
$params[’id’] = ’lcid’;
$params[’startID’] = ’0’;
$params[’sortBy’] = $b;
$params[’sortDir’] = $s;
$params[’hideFolders’] = ’1’;
$params[’tpl’] = ’ditto_link’;
$params[’language’] = ’russian’;
$params[’dateFormat’] = ’%Y.%m.%d’;
$params[’summarize’] = ’25’;
$params[’paginate’] = ’1’;
$params[’filter’] = $filter;
$params[’debug’] = ’0’;

# Передаем параметры Дитто
$di = $modx->runSnippet(’Ditto’, $params);

$style = ’Тут начало оформления.’;
if ($b == ’pagetitle’) { $sortpo = ’
* Сортировка по названию.’; }
if ($b == ’price’) { $sortpo = ’
* Сортировка по цене.’; }
if ($b == ’tovar’) { $sortpo = ’
* Сортировка по товару.’; }
$textdo = $style.$sortpo;
$textpo = ’Тут конец оформления.’;

# Склеиаем текст-до + вызов Дитто + текст-после
$resc = $textdo.$di.$textpo;

# Выводим результат
return $resc;

P.S. Пример писал на форуме и на скорую руку, не тестил. Будут баги/вопросы - пишите, будет время - отвечу. Так же возможны орфографические и пунктуационные ошибки smiley Не придирайтесь.]]>
D.SID Mar 30, 2009, 03:06 AM https://forums.modx.com/thread/62011/#dis-post-366585