Добрый Вечер! Подскажите пожалуйста, как в расширяющем процессоре сделать сортировку по нескольким значениям? Аналогию вот этого: по одному значению получилось: А вот так уже не идет И как можно остальные записи сортировать по другому полю? Посоветуйте, где справку по этому вопросу почитать...
'sort' => 'proizv.value ="Decoriis","Berlinoyal" ', это скорее походит на фильтр
Если нужна фильтрация, то стоит делать так:
При задании сортировки указываются поля, по которым нужно сортировать выборку. Никакие значения там не указываются. Чтобы быстрее понять xpdo очень рекомендую ознакомиться с основами SQL - он построен на них. Иначе очень трудно будет :)
Sql я знаю, поэтому и привожу рабочий пример от туда, мне нужно его переложить на xpdo .С одним значением у меня это работает значит можно сделать и несколько значений, только пока не знаю правильный синтаксис... А остальные строки мне отбрасывать не нужно, фильтрацию я уже сделала выше. Мне их надо вывести следом, но уже сортировать по другому по полю. По-русски задача звучит так: Вывести список товаров таком виде: сначала приоритетных производителей, затем остальные по дате поступления на склад.
Это у вас буквально sort => true|false Если proizv.value = 'Decoriis', то это true, все остальное - false. То есть вы сортируете на Да и Нет. Сделайте $q->prepare(); $q->toSQL() и посмотрите какой у вас конечный SQL получается. Саша вам правильно говорит: вы не так запрос строите. Если вам надо аналог этого сделать SELECT * FROM page ORDER BY FIELD(season, "весна","лето","осень","зима"), то пробуйте так:
именно так не получилось. в запросе ничего не меняется Добавила в функцию вот так в запросе видны изменения а на фронте - нет. Решила проверить как ведет себя запрос через phpmyAdmin. Оказалось, запрос верный, только нужные результаты в конце списка. Изменила порядок сортировки на DESC - все стало как надо. Но теперь я никак не могу найти откуда идет ASC в запросе на сайте. Сама я его не дописывала... Через передачу параметра процессору не получается. Стала искать в наследуемых классах, добралась до site/web/resources/getdata.class.php изменила Но ничего не помогает... Ума не проложу, где это сидит Как еще попробовать?
В своем конечном процессоре в методе initialize пропишите и посмотрите с какими параметрами в итоге инициируется процессор. Если какие-то сортировки добавлены после этого, то в большинстве случаев это косяк. Пропишите отладку и в методах prepareQueryBeforeQuery и prepareQueryAfterCount, а так же в setSelection, если он есть. Я ничего не могу так сказать, точек костыльных вхождений очень много. Я в своих процессорах не переопределяю логику MODX-процессоров относительно параметров сортировки, так что по умолчанию все должно работать как есть. Можете попробовать крайний случай. В prepareQueryBeforeCount выполнить $this->unsetProperty("sort"); $this->unsetProperty("dir"); и прописать свою сортировку непосредственно в объект запроса в методе prepareQueryAfterCount.
Николай! я в отчаянии... Удалось получить входные параметры, но не в методе initialize, а в prepareQueryBeforeQuery как я и писала ранее сортировка идет по менюИндекс, но в запросе на выходе это не видно: Следуя Вашему совету, убрала сортировку в методе prepareQueryBeforeCount : и добавила вот что получается : это как понимать? почему ASC остается и просто дописывается Desc ( и даже моим регистром)
В вашем случае надо так: DESC/ASC должно вторым параметром передаваться. Если второй параметр не передан, по умолчанию используется ASC
Ура! все получилось. Спасибо, Николай за науку и терпение. Как получу барыж от заказчика, поделюсь))
Не за что! Хорошо :)