Добрый Вечер!
Подскажите пожалуйста, как в расширяющем процессоре сделать сортировку по нескольким значениям? Аналогию вот этого:
по одному значению получилось:
А вот так уже не идет
И как можно остальные записи сортировать по другому полю?
Посоветуйте, где справку по этому вопросу почитать...
> '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
Ура! все получилось.
Спасибо, Николай за науку и терпение.
Как получу барыж от заказчика, поделюсь))
Не за что!
Хорошо :)