MODX [[+revo]] - pdoPage ломает сортировку pdoMenu
Обертка pdoPage напрочь ломает сортировку, которая установлена в pdoMenu. Смотрите на прикрепленные изображения. Вот и как это понимать, какая логика? Это баг pdoTools или так должно быть? Уже сутки бьюсь, ничего не могу поделать :(
Вызов голого pdoMenu:
Вызов с оберткой в pdoPage:
Чанк price_ul_li:
[[+menuindex]] вывожу только для теста. [[+wrapper]] можно и убрать, но к делу не относится. Уровень вложенности ресурсов абсолютно у всех тестируемых товаров и категорий одиноковый и выглядит как:
1. каталог => 2. категория => 3. товар. В вызовах сниппетов &parents=[[*id]] соответствует уровню 1.
Также тестировал с дефолтным pdoResources, эффект абсолютно аналогичный.
Может быть есть кто-то, кто с этим уже сталкивался и может подсказать решение или хотя бы направить в нужную сторону?
Вызов голого pdoMenu:
<div id='pricecat'>
<table cellpadding='0' width='100%' border='0'>
[[!pdoMenu?
&parents=`[[*id]]`
&level=`2`
&tplOuter=`@INLINE [[+wrapper]]`
&tpl=`price_ul_li`
&sortby=`{"menuindex":"ASC" }`
&tvPrefix=``
&processTVs=`1`
&includeTVs=`mainimg,price,priceopt,edizm`
]]
</table>
</div>Вызов с оберткой в pdoPage:
<div id='pricecat'>
<table cellpadding='0' width='100%' border='0'>
[[!pdoPage?
&element=`pdoMenu`
&limit=`20`
&parents=`[[*id]]`
&level=`2`
&tplOuter=`@INLINE [[+wrapper]]`
&tpl=`price_ul_li`
&sortby=`{"menuindex":"ASC" }`
&tvPrefix=``
&processTVs=`1`
&includeTVs=`mainimg,price,priceopt,edizm`
]]
</table>
</div>Чанк price_ul_li:
[[+template:is=`4`:then=`
<tr id='titlecat' onclick='window.location.href="[[~[[+id]]]]"'>
<td colspan='5' align='center'>
<h4>[[+menutitle:default=`[[+pagetitle]]`]] [[+menuindex]]</h4>
</td>
</tr>
`:else=`
<tr onclick='window.location.href="[[~[[+id]]]]"'>
<td width='2%'>[[+mainimg:is=``:then=``:else=`<img src='[[+mainimg:phpthumbon=`w=80&h=80`]]'>`]]</td>
<td width='68%'>
<h4>[[+pagetitle]] [[+menuindex]]</h4></td>
[[+price:is=``:then=`<td>[[+nonal]]</td>`:else=`<td>[[+price]] руб.</td>`]]
[[+priceopt:is=``:then=`<td></td>`:else=`<td>[[+priceopt]] руб.</td>`]]
<td>[[+edizm]]</td>
</tr>
`]]
[[+wrapper]][[+menuindex]] вывожу только для теста. [[+wrapper]] можно и убрать, но к делу не относится. Уровень вложенности ресурсов абсолютно у всех тестируемых товаров и категорий одиноковый и выглядит как:
1. каталог => 2. категория => 3. товар. В вызовах сниппетов &parents=[[*id]] соответствует уровню 1.
Также тестировал с дефолтным pdoResources, эффект абсолютно аналогичный.
Может быть есть кто-то, кто с этим уже сталкивался и может подсказать решение или хотя бы направить в нужную сторону?
Комментарии: 29
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
sortby — указывается поле в виде строки, по которому нужно сортировать
sortdir — указывается направление сортировки
sortby в pdoMenu по умолчанию равен 'menuindex' (что ожидаемо) и выглядит так, как будто все работает правильно, потому что ваш вариант просто игнорируется, как неправильный. pdoPage имеет свои значения по умолчанию, которые и применяет, ваши значения опять же игнорируются.
Должно быть так:
&sortby=`menuindex`
&sortdir=`ASC`
Самое близкое кстати к тому, что надо было &sortby=`{«parent, menuindex»:«ASC»}`, а также &sortby=`{«menuindex»:«ASC»,«isfolder»:«DESC»}`, но все равно криво… В первом случае выравниваются как надо товары, но категории «кудыпопало», во втором случае категории становятся на место, а вот товары упорядочиваются не по индексу относительно категории в которой расположены, а относительно всего каталога.
Написать какой-ньть сниппет, который надергает этих id в нужной последовательности мне не проблема, а вот как скормить этот список pdoШным сниппетам — не могу врубиться((
На выходе абсолютно такая же картина как у меня с оберткой в pdoPage и параметром &sortby=`{«menuindex»:«ASC»} (см. ранее прикрепленную картинку)
Замени три строчки на эти
У себя проверил — работает.
Если лимит 20 — то все категории скапливаются в конце, на самой последней странице пагинации. Если ставлю достаточно большой лимит, 100-200, например, то все норм, располагаются там, где им и положено. Если плавно опускаю значение, например 60-50 делаю, то все, уже позиции слетают — чем ниже число лимита, тем больше категорий, начиная с начала списка, из положенных мест перепрыгивают в конец.
Глюк зависит, насколько я понял, от общего количества выбираемых ресурсов и от устанавливаемого лимита.
ps: Почекал сейчас еще без обертки — оказывается тот же глюк, если задавать лимит на количество выводимых ресурсов. Таким образом именно pdoPage не при чем! Баги именно в pdoMenu / pdoResources… И я понял какие!!! Сортировка происходит с полной выборкой правильно потому, что имеются все необходимые элементы, которые потом расставляются по своим местам. А когда у нас лимит стаит, то и части элементов как бы нет, и сортируются только лишь оставшиеся. За счет этого выводы разные получаются с лимитом и без.
Вот как бы так сделать, чтоб лимит был, но чтоб позиции оказались те же, как будто его нет?)
Это не miniShop?
Вот если бы оно выбирало изначально в последовательности, которая в сортировке задана, вот тогда бы все отлично было! Короче, надо чтоб автор доработал компоненты и по возможности разделил &sortby на что-то типо &sortbyBefore и &sortbyAfter… Ну либо не разделять, а сделать переключалку еще одним параметром, например &sqlSort=`1` или =`0` (1 — значения выбираются из базы в соответствии с условиями сортировки, а 0 — когда сортировка выборки отключена и значения сортируются уже после того как были получены).
А товары как загружал? Catalogfilm, shopkeeper?
Товары на этом сайте — просто обычные ресурсы (класс modResource) со своими TVэхами.
А можете гденьть пример показать, где у вас этот же вызов правильно выбирает все?
PS: Я за баланс
Для вас решение будет состоять из двух частей — сначала выборка товаров (с постраничностью), а потом группировка по категориям (на каждой странице отдельно).
Если скинете доступ в личку, попробую чем-нибудь помочь за небольшое вознаграждение
Тем не менее, мне очень интересно было бы либо чтоб добавили функционал в pdoTools, о котором я выше писал, либо чтоб нашлась таки с имеющимся функционалом стопудовая возможность реализации порядка «как в дереве», но с лимитами и разбиениями на подстраницы.