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