Сортировка pdoPage (категории по menuindex)

Доброго дня!

Есть дерево ресурсов:

Каталог
-Категория 1
--Товар 1
--Товар 2
-Категория 2
--Товар 3
--Товар 4
-Категория 3
--Товар 5
--Товар 6


Как сделать чтобы при перемещении в админке категории 2 выше категории 1, сначала бы выводились товары категории 2, а потом с категории 1: Товар 3, Товар 4, Товар 1, Товар 2, Товар 5, Товар 6.

Сейчас вызов такой:
[[!pdoPage? 
    &element=`msProducts` 
    &limit=`24` 
    &parents=`[[*id]]` 
    &sortby=`{"parent":"ASC","menuindex":"ASC"}`
]]

Порядок вывода товаров из категорий правильный (menuindex).

А порядок вывода категорий не меняется, при перемещении их в админке.

Буду очень благодарен за помощь
Константин
25 мая 2017, 05:03
modx.pro
3 853
0

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

Гриборий
25 мая 2017, 13:39
1
+1
Правильно, вы ж сортируете их вначале по id родителя, а потом по menuindex товара. А при изменении menuindex у родителя его id же не меняется.
Сначала получайте родителей, сортируя по menuindex, потом в чанке шаблона еще один вызов сниппета, уже для получения товаров.
    Константин
    25 мая 2017, 14:09
    0
    точно, спасибо!!!
      Константин
      26 мая 2017, 08:22
      0
      Логика на первый взгляд правильная была, но что делать с пагинацией?

      Сначала как понимаю должен вызваться pdoResources, который вытаскивает правильный порядок категорий, а в чанке pdoResources вызывается pdoPage для каждой категории отдельно. В этом случае получается несколько блоков пагинаций (сколько категорий)
      Ежели сначала pdoPage вызвать, то пагинация будет на количество категорий, а не товаров.((
      Константин
      26 мая 2017, 10:15
      0
      Решил так:

      ID шаблона категорий — 3
      ID шаблона товаров — 4

      В шаблоне категории:
      [[!pdoPage? 
      &element=`msProducts` 
      &limit=`24` 
      &parents=`[[*id]]` 
      &resources=`[[pdoResources?&element=`msProducts`&tpl=`category_id`&limit=`0`&parents=`[[*id]]`&sortby=`menuindex`&sortdir=`ASC`&where=`{"template":3}`]]`
      &sortby=``
      &sortdir=`ASC`
      &where=`{"template":4}`
      ]]
      [[!+page.nav]]

      Чанк category_id:
      [[!pdoPage? 
              &element=`msProducts` 
              &tpl=`category_id_tpl` 
              &limit=`0` 
              &parents=`[[+id]]` 
              &includeTVs=`1`
              &sortby=`{"parent":"ASC","menuindex":"ASC"}`
              &where=`{"template":4}`
      ]]


      Чанк category_id_tpl:
      [[+id]],
        Гриборий
        26 мая 2017, 15:03
        0
        Да, если нужна пагинация, перечислить ресурсы хорошая мысль. В pdoResources можно указывать &return=`ids`, чтобы не мудрить с шаблонами.
        Pavel Kravchuk
        02 апреля 2020, 18:57
        +1
        Сделал таким же методом, но немного по другому. Может кому пригодится.
        Ключевая фраза в сортировке
        &sortby=`FIELD(parent, [[+ids]])`
        т.е. сортируем по родителям и передаем список родителей.
        [[!pdoResources?
            &parents=`275`
            &return=`ids`
            &limit=`0`
            &where=`{"template":3}`
            &sortby=`{"menuindex":"ASC"}`
            &toPlaceholder=`ids`
        ]]
        [[!pdoResources?
            &parents=`[[+ids]]`
            &tpl=`products_tpl`
            &limit=`0`
            &hideContainers=`1`
            &sortby=`FIELD(parent, [[+ids]])`
            &sortdir=`ASC`
            &limit=`0`
        ]]
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          7