Сортировка тикетов по двум параметрам.
Добрый день!
Ребят, есть тут кто-нибудь, то реализовывал сортировку ресурсов по двум-трем параметрам, включая сортировку по TV?
Есть у меня раздел с организациями и там первоначально шла сортировка по рейтингу, от лучшего к худшему, а далее сортировка по id ресурса. В качестве дополнения для рейтинга используется FiveStarRating. Решение для сортировки по рейтингу, кстати, взял отсюда в итоге получился сниппет:
Кстати, на том же сайте, где я первоначально брал для себя решение для сортировки мне подсказали подкорректировать вывод так:
Подскажите, пожалуйста, может я что забыл указать в параметрах и поэтому нет правильной сортировки?
Спасибо.
Ребят, есть тут кто-нибудь, то реализовывал сортировку ресурсов по двум-трем параметрам, включая сортировку по TV?
Есть у меня раздел с организациями и там первоначально шла сортировка по рейтингу, от лучшего к худшему, а далее сортировка по id ресурса. В качестве дополнения для рейтинга используется FiveStarRating. Решение для сортировки по рейтингу, кстати, взял отсюда в итоге получился сниппет:
{'!pdoPage' | snippet: [
'leftJoin' => '{
"SimpleRating":{
"class":"SimpleRating",
"on":"Ticket.id = SimpleRating.resource"
}
}',
'select' => '{
"Ticket":"*",
"SimpleRating":"rating_value"
}',
'sortby' => [
"SimpleRating.rating_value" => "desc",
"id" => "desc"
],
'loadModels'=>'simplerating',
'element'=>'getTickets',
'hideContainers' => 1,
'parents '=> $_modx->resource.id,
'limit' => 10,
'depth' => 1,
'ajaxMode' => 'default',
'prepareTVs' => 'img',
'tpl' => 'oneOrgTpl',
'where' => ['class_key' => 'Ticket'],
'includeTVs' => 'img,org-work-time,addresses',
]}
В последствии появилась необходимость закреплять некоторые записи в начале списка и для этого я создал доп. поле (чекбокс) org_sticky_top, которое принимает значение 1 или 0, т.е закреплять организацию в начале списка или нет. Немного переделав сниппет под новый параметр получил:{'!pdoPage' | snippet: [
'leftJoin' => '{
"SimpleRating":{
"class":"SimpleRating",
"on":"Ticket.id = SimpleRating.resource"
}
}',
'select' => '{
"Ticket":"*",
"SimpleRating":"rating_value"
}',
'sortby' => [
"org_sticky_top" => "desc",
"SimpleRating.rating_value" => "desc",
"id" => "desc"
],
'loadModels'=>'simplerating',
'element'=>'getTickets',
'hideContainers' => 1,
'parents '=> $_modx->resource.id,
'limit' => 10,
'depth' => 1,
'ajaxMode' => 'default',
'prepareTVs' => 'img',
'tpl' => 'oneOrgTpl',
'where' => ['class_key' => 'Ticket'],
'includeTVs' => 'img,org-work-time,addresses,org_sticky_top',
]}
Теперь, отмеченные галочкой организации размещаются наверху и сортировка по рейтингу в них и только в них работает отлично. В остальных записях сортировка, к сожалению, не работает и организация, имеющая худший рейтинг или вообще без рейтинга, может стоять выше, чем организация с лучшим рейтингом.Кстати, на том же сайте, где я первоначально брал для себя решение для сортировки мне подсказали подкорректировать вывод так:
'sortbyTV' => 'org_sticky_top',
'sortbyTVType' => 'integer',
'sortby' => '{
"SimpleRating.rating_value": "desc"
}',
но результат тот же.Подскажите, пожалуйста, может я что забыл указать в параметрах и поэтому нет правильной сортировки?
Спасибо.
Комментарии: 1
Разобрался сам в своей проблеме с сортировкой. В доп. поле org_sticky_top я указал значение по-умолчанию равным 0. Не нужно было там изначально что-то писать и все было бы ок.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.