Постоянно прошу... решил поделиться, может кому пригодится (экономия времени, к тому же).
Всем известен вывод pdoPage с выводом списка тикетов. Кроме того, многие знают о том, что в тикетах есть возможность подсчета количества просмотров и система оценок.
К сожалению (я так понимаю, может я и не прав) при превышении некоторого количества тикетов вся система начинает жутко тормозить, и, видимо, поэтому многое не афишируется.
У меня на сайте тикетов около 700 штук, я пока проблем не замечаю.
Решил сделать вывод списка тикетов с упорядочиванием по дате добавления, количеству просмотров и оценок пользователей (по убыванию и возрастанию по каждому из выборов).
Как это сделать проще всего?
Мне показалось, что лучше всего использовать ОДИН pdoPage с join-ами к соответствующим таблицам (TicketVote и TicketView) и выбором сортировки (orderby) и варианта его (sortby) из строки.
[[$headerlist]]<div id="osnpage"> <div class="rows">[[!pdoPage? &element=`getTickets` &tpl=`TicketArticleRowEdit`&includeContent=`1`&includeTVs=`tvrules,tvimageticket`&ajaxMode=`button`&pageVarKey=`osn`&pageNavVar=`osn.nav` &limit=`25`&sortby=`[[!sortirovka? &vhod=`[[!#GET.orderby]]`]]` &leftJoin=`{"Vote":{"class":"TicketVote","on":"Ticket.id=Vote.id and Vote.class='Ticket'"},"TicketView":{"class": "TicketView","on": "Ticket.id = TicketView.parent"}}` &select=`{"Ticket":"*", "Vote":"SUM(Vote.value) as rating","TicketView": "COUNT(TicketView.uid) as countviews"}` &groupby=`Ticket.id` &sortdir=`[[!sortirpor? &vhoda=`[[!#GET.sortby]]`]]`]]</div> [[!+osn.nav]]</div>Как сортировать по клику?
Нужно создать чанк headerlist (ниже) с соответствующими ссылками и разместить его вызов перед pdoPage
<a href="[[~[[*id]]]]?orderby=datetime[[!urlfromget?vhodurl=[[!#GET.tag]]]]" title="Сортировка по дате по убыванию - новые в начале">по дате <i class="general foundicon-down-arrow"></i></a> <a href="[[~[[*id]]]]? orderby=datetime&sortby=asc[[!urlfromget?vhodurl=[[!#GET.tag]]]]" title="Сортировка по дате по возрастанию - старые в начале"><i class="general foundicon-up-arrow"></i></a> <a href="[[~[[*id]]]]?orderby=rating[[!urlfromget? vhodurl=[[!#GET.tag]]]]" title="Сортировка по убыванию рейтинга - с большим в начале">по рейтингу<i class="general foundicon-down-arrow"></i></a> <a href="[[~[[*id]]]]?orderby=rating&sortby=asc[[!urlfromget?vhodurl=[[! #GET.tag]]]]" title="Сортировка по возрастанию рейтинга - с меньшим в начале"><i class="general foundicon-up-arrow"></i></a> <a href="[[~[[*id]]]]?orderby=view[[!urlfromget?vhodurl=[[!#GET.tag]]]]" title="Сортировка по просмотрам - с большими в начале">по просмотрам<i class="general foundicon-down-arrow"></i></a> <a href="[[~[[*id]]]]?orderby=view&sortby=asc[[!urlfromget?vhodurl=[[!#GET.tag]]]]" title="Сортировка по просмотрам - с меньшими в начале"><i class="general foundicon-up-arrow"></i></a>Кликнув по ссылкам - сразу получаем список статей, начиная с первой страницы.
<?php$n = 'createdon';if(isset($vhod)) $n = $vhod;switch($n){case 'datetime': return 'createdon';case 'rating': return 'rating';case 'view': return 'countviews';default: return 'createdon';}<?php$na = 'DESC';if(isset($vhoda)) $na = $vhoda;switch($na) {case '':case 'desc': return 'desc';case 'asc': return 'asc';default: return 'DESC';}urlfromget добавляет в адрес строку тега, если она (строка тега - tag) ИЗНАЧАЛЬНО там присутствовала.
К примеру, изначальная страница списка статей по тегу The MIR
http://page.maple4.ru/stati-po-tegam.html?tag=THE+MIR&key=tags
после клика по сортировке (по дате добавления ПО ВОЗРАСТАНИЮ, в начале - самые старые) адрес примет вид
http://page.maple4.ru/stati-po-tegam.html?orderby=datetime&sortby=asc&tag=THE+MIR
<?php$n = '';if(isset($vhodurl)) $n = $vhodurl;if($n=='') return '';$n=urlencode($n);return '&tag='.$n;Прошу особо не критиковать за код PHP в сниппетах, но приму ПРАВИЛЬНЫЙ вариант с точки зрения сообщества :)
P.S.
Есть ли вариант нормальный реализации для работы с избранными страницами?
