Сортировка тикетов по двум параметрам.

Добрый день!
Ребят, есть тут кто-нибудь, то реализовывал сортировку ресурсов по двум-трем параметрам, включая сортировку по 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"
}',
но результат тот же.

Подскажите, пожалуйста, может я что забыл указать в параметрах и поэтому нет правильной сортировки?

Спасибо.
Константин
15 июля 2018, 18:56
modx.pro
1
1 052
0

Комментарии: 1

Константин
16 июля 2018, 16:25
0
Разобрался сам в своей проблеме с сортировкой. В доп. поле org_sticky_top я указал значение по-умолчанию равным 0. Не нужно было там изначально что-то писать и все было бы ок.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    1