Как вывести ресурсы определенного уровня?

getResources: Как вывести ресурсы определенного уровня?

Пример:

Page1
|
SubPage1 — SubPage2 — SubPage3
|
SubSubPage1 — SubSubPage2

— выводить страницы SubSubPage1, SubSubPage2 и все другие, которые когда-либо будут добавлены к SubPage1 или SubPage2 или SubPage3

В Evolution есть extenter, так что получается типа такого: [!Ditto? &parents=`1` &extenders=`level` &level=`3` &tpl=`DittoTpl`!]. А как в Revolution и с getResources? Или не getResources?
Tri Motor
05 января 2015, 12:48
modx.pro
7 682
0

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

Tri Motor
06 января 2015, 12:53
0
На forums.modx.com выяснилось следующее:

forums.modx.com/thread/95675/getresources-listing-resources-of-a-certain-level#dis-post-517925
    Максим Кузнецов
    06 января 2015, 13:27
    0
    pdoMenu, pdoResources? docs.modx.pro/components/pdotools/
      Tri Motor
      06 января 2015, 14:29
      0
      pdoMenu не то. Это для меню, типа Wayfinder. А мне выводить анонсы страниц в сайдбаре: заголовок, поле description и часть текста. Всё вполне делается с помощью getResources, если родители указываются в явном виде, в виде id или нескольких id. Вопрос только с тем, что ставить в &parents, что бы выводились анонсы страниц не какого-то определенного родителя, а всех страниц одного уровня: ведь родителей сегодня один список, а завтра другой, в явном виде по id указывать на них, это не дело.

      А в pdoResources какой параметр позволит выбирать страницы определенного уровня?
        Максим Кузнецов
        06 января 2015, 14:57
        0
        Может, я не совсем корректно уловил задачу, но, похоже, вам для данной задачи все равно потребуется использовать часть функционала pdoMenu, а именно — обратный цикл, чтобы определить уровень вложения.

        Думаю, основной параметр для данной задачи — where +было бы на порядок проще, если бы нужные для вывода документы, помимо глубины, имели еще общие или справедливые только для них шаблоны — тогда весь вызов можно было бы ограничить только условием на соответствие этих шаблонов.
      Евгений Webinmd
      06 января 2015, 17:02
      0
      pdoResources + pdoField.
      Вторым выбираете id нужных уровней, и подсовываете в первый сниппет в параметр resources

      Хотя не, не вник в задачу, сорри, но оставлю на всякий случай, авось зацепитесь чем-то
      можно попробовать запихнуть в parents это всё
      [[!pdoResources?
      &resources=`[[!pdoField? &field=`id` &top=`2`]]`
      ]]
        Tri Motor
        06 января 2015, 17:20
        0
        >>[[!pdoResources?
        &resources=`[[!pdoField? &field=`id` &top=`2`]]`
        ]]

        Конструкция вызывается на конкретной странице. А страница может быть разного уровня. Соотвественно, как и в случае с использованием UltimateParent, результаты будут разные.

        В Evolution и Ditto дело делает экстендер level. В Revolution и getResources — предложили костыль по ссылке: forums.modx.com/thread/95675/getresources-listing-resources-of-a-certain-level#dis-post-517925

        >>Хотя не, не вник в задачу, сорри

        — В сайдбаре, который на всех страницах (любого уровня) должны выводится анонсы страниц строго определенного уровня.
          Сергей Шлоков
          06 января 2015, 17:31
          0
          В Evolution и Ditto дело делает экстендер level. В Revolution и getResources — предложили костыль по ссылке: forums.modx.com/thread/95675/getresources-listing-resources-of-a-certain-level#dis-post-517925
          Это не кастыль, а вполне нормальное решение. Я также выбираю нужный уровень. Кастыль — это например, когда ресурсам нужного уровня выставляеться TV и по нему формируется список.
        Николай Загумённов
        07 января 2015, 00:22
        0
        Page1 и SubPage1 = контейнеры
        SubSubPage2 = ресурс
        Если так то можно просто исключить контейнеры из вывода
          Алексей Яковлев
          02 апреля 2015, 19:02
          0
          Захотел сделать разный вывод результатов pdoresources в зависимости от уровня вложенности документа, в одном, разумеется, шаблоне. То есть, если ресурс 3 уровня (Рубрика/Подрубрика/Документ), то про него выводить pagetitle родителя и pagetitle документа. А если ресурс 2-го уровня (Рубрика/Документ), чтоб выводился только pagetitle документа.
          Вышеозначенные ссылки ничего не прояснили, как применить сниппет getParentsAtLevel не вполне ясно.
          Вариант с проверкой на контейнеры работает бессмысленно, вызов в шаблоне:
          [[+isfolder:is=`0`:then=`[[!pdoField? &id=`[[+parent]]` &field=`pagetitle`]] - [[+pagetitle]]`:else=`[[+pagetitle]]`]]
          То есть для случая 3-х уровневого (Рубрика/Подрубрика/Документ) выводится как надо pagetitle родителя и pagetitle документа, но ведь и для 2-х уровневого случая (Рубрика/Документ) то же самое получается. А тут как раз нужен один pagetitle. Не знаю, нужно ли пояснять, для чего это нужно и почему так, но я готов при необходимости, авось попроще решение найдется.
          Может как-то из шаблона можно проверить есть ли у родителя родитель-контейнер? Если нет, то опять же выводить `пустоту` на месте pagetitle родителя? Кажется это решило бы вопрос, хоть и криво все это выглядит.
            Алексей Яковлев
            03 апреля 2015, 01:45
            0
            в итоге со своей задачей разобрался двойной проверкой, а именно 1) является ли родитель контейнером, и если да то 2) совпадает ли его id с id родителя текущего документа, то есть уровень вложенности документа 2 (а не 3).
            вывод в шаблоне выглядит так:
            [[+isfolder:is=`0`:then=`[[+parent:is=`[[+id:pdoField=`{"field":"id", "top":2}`]]`:then=`[[+pagetitle]]`:else=`[[!pdoField? &id=`[[+parent]]` &field=`pagetitle`]]. [[+pagetitle]]`]]`:else=`[[+pagetitle]]`]]
            вычурно, но авось кому пригодится.
            таким образом, видимо, можно сравнивать документ на совпадение родителей и исключать лишнее из вывода для любых уровней, используя pdoField и параметр «top».
            Алексей Яковлев
            02 апреля 2015, 19:21
            0
            В идеале хотелось бы что-то вроде определителя уровня [[+id]]. Не знаю только, как можно было бы оформить эту логику в вызове внутри шаблона. Типа, if уровень вложенности +id = 3, то пишем pagetitle родителя и pagetitle +id, else (то есть в моем случае уровень вложенности +id = 2) пишем только pagetitle +id.?
              Fedor
              15 апреля 2018, 12:55
              0
              Привет всем! Немного не по теме, но пока искал ответ на один вопрос, постоянно втыкался на эту ветку.
              Суть в чем. Стояла задача чтоб когда находишься на странице которая находится в контейнере например «Продукция», подставлялся в параметр класса «active» делая в меню ссылку «Продукция» другого цвета. И даже перейдя на страницу самой продукции, в меню она тоже оставалась активной. В общем порядок получился такой:
              Установил инструмент pdoTools (отсюда)
              Потом в чанке, например в коде меню
              <li class="navitem"><a class="navlink" href="/[[~3]]">Фото и видео</a>
              </li>
              когда элемент меню должен становиться другим цветом, появляется параметр «active»
              <li class="navitem active"><a class="navlink" href="/[[~3]]">Фото и видео</a>
              </li>
              И вот, при переходе например к странице «Природа»([[~12]]) являющейся дочерней «Фото и видео»([[~3]]). Надо что-бы меню автоматически оставалось активным. Получился костыль своеобразный, но зато не плодить шаблоны:

              <li class="navitem [[*parent:is=`3`:or:is=`10`:or:is=`12`:then=` active`]]
                                  [[*id:is=`3`:then=` active`]]"><a class="navlink" href="/[[~3]]">Фото и видео</a>
              </li>
              Логика: Если id родителя страницы = id «3» или 10 или 12 (например у страницы Природа, которая является дочкой Фото и видео есть своя дочерняя страница и вы перешли на нее), то написать " active"
              [[*id:is=`3`:then=` active`]] — если id страницы = 3, то сделать активным меню «Фото и видео»
                Андрей
                15 апреля 2018, 15:05
                0
                Судя по всему вам нужно воспользоваться pdoMenu.
                Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                13