Как вывести ресурсы определенного уровня?
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?
Пример:
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?
Комментарии: 13
На forums.modx.com выяснилось следующее:
forums.modx.com/thread/95675/getresources-listing-resources-of-a-certain-level#dis-post-517925
forums.modx.com/thread/95675/getresources-listing-resources-of-a-certain-level#dis-post-517925
pdoMenu, pdoResources? docs.modx.pro/components/pdotools/
pdoMenu не то. Это для меню, типа Wayfinder. А мне выводить анонсы страниц в сайдбаре: заголовок, поле description и часть текста. Всё вполне делается с помощью getResources, если родители указываются в явном виде, в виде id или нескольких id. Вопрос только с тем, что ставить в &parents, что бы выводились анонсы страниц не какого-то определенного родителя, а всех страниц одного уровня: ведь родителей сегодня один список, а завтра другой, в явном виде по id указывать на них, это не дело.
А в pdoResources какой параметр позволит выбирать страницы определенного уровня?
А в pdoResources какой параметр позволит выбирать страницы определенного уровня?
Может, я не совсем корректно уловил задачу, но, похоже, вам для данной задачи все равно потребуется использовать часть функционала pdoMenu, а именно — обратный цикл, чтобы определить уровень вложения.
Думаю, основной параметр для данной задачи — where +было бы на порядок проще, если бы нужные для вывода документы, помимо глубины, имели еще общие или справедливые только для них шаблоны — тогда весь вызов можно было бы ограничить только условием на соответствие этих шаблонов.
Думаю, основной параметр для данной задачи — where +было бы на порядок проще, если бы нужные для вывода документы, помимо глубины, имели еще общие или справедливые только для них шаблоны — тогда весь вызов можно было бы ограничить только условием на соответствие этих шаблонов.
pdoResources + pdoField.
Вторым выбираете id нужных уровней, и подсовываете в первый сниппет в параметр resources
Хотя не, не вник в задачу, сорри, но оставлю на всякий случай, авось зацепитесь чем-то
можно попробовать запихнуть в parents это всё
Вторым выбираете id нужных уровней, и подсовываете в первый сниппет в параметр resources
Хотя не, не вник в задачу, сорри, но оставлю на всякий случай, авось зацепитесь чем-то
можно попробовать запихнуть в parents это всё
[[!pdoResources?
&resources=`[[!pdoField? &field=`id` &top=`2`]]`
]]
>>[[!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
>>Хотя не, не вник в задачу, сорри
— В сайдбаре, который на всех страницах (любого уровня) должны выводится анонсы страниц строго определенного уровня.
&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
>>Хотя не, не вник в задачу, сорри
— В сайдбаре, который на всех страницах (любого уровня) должны выводится анонсы страниц строго определенного уровня.
В Evolution и Ditto дело делает экстендер level. В Revolution и getResources — предложили костыль по ссылке: forums.modx.com/thread/95675/getresources-listing-resources-of-a-certain-level#dis-post-517925Это не кастыль, а вполне нормальное решение. Я также выбираю нужный уровень. Кастыль — это например, когда ресурсам нужного уровня выставляеться TV и по нему формируется список.
Page1 и SubPage1 = контейнеры
SubSubPage2 = ресурс
Если так то можно просто исключить контейнеры из вывода
SubSubPage2 = ресурс
Если так то можно просто исключить контейнеры из вывода
Захотел сделать разный вывод результатов pdoresources в зависимости от уровня вложенности документа, в одном, разумеется, шаблоне. То есть, если ресурс 3 уровня (Рубрика/Подрубрика/Документ), то про него выводить pagetitle родителя и pagetitle документа. А если ресурс 2-го уровня (Рубрика/Документ), чтоб выводился только pagetitle документа.
Вышеозначенные ссылки ничего не прояснили, как применить сниппет getParentsAtLevel не вполне ясно.
Вариант с проверкой на контейнеры работает бессмысленно, вызов в шаблоне:
Может как-то из шаблона можно проверить есть ли у родителя родитель-контейнер? Если нет, то опять же выводить `пустоту` на месте pagetitle родителя? Кажется это решило бы вопрос, хоть и криво все это выглядит.
Вышеозначенные ссылки ничего не прояснили, как применить сниппет getParentsAtLevel не вполне ясно.
Вариант с проверкой на контейнеры работает бессмысленно, вызов в шаблоне:
[[+isfolder:is=`0`:then=`[[!pdoField? &id=`[[+parent]]` &field=`pagetitle`]] - [[+pagetitle]]`:else=`[[+pagetitle]]`]]
То есть для случая 3-х уровневого (Рубрика/Подрубрика/Документ) выводится как надо pagetitle родителя и pagetitle документа, но ведь и для 2-х уровневого случая (Рубрика/Документ) то же самое получается. А тут как раз нужен один pagetitle. Не знаю, нужно ли пояснять, для чего это нужно и почему так, но я готов при необходимости, авось попроще решение найдется.Может как-то из шаблона можно проверить есть ли у родителя родитель-контейнер? Если нет, то опять же выводить `пустоту` на месте pagetitle родителя? Кажется это решило бы вопрос, хоть и криво все это выглядит.
в итоге со своей задачей разобрался двойной проверкой, а именно 1) является ли родитель контейнером, и если да то 2) совпадает ли его id с id родителя текущего документа, то есть уровень вложенности документа 2 (а не 3).
вывод в шаблоне выглядит так:
таким образом, видимо, можно сравнивать документ на совпадение родителей и исключать лишнее из вывода для любых уровней, используя pdoField и параметр «top».
вывод в шаблоне выглядит так:
[[+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».
В идеале хотелось бы что-то вроде определителя уровня [[+id]]. Не знаю только, как можно было бы оформить эту логику в вызове внутри шаблона. Типа, if уровень вложенности +id = 3, то пишем pagetitle родителя и pagetitle +id, else (то есть в моем случае уровень вложенности +id = 2) пишем только pagetitle +id.?
Привет всем! Немного не по теме, но пока искал ответ на один вопрос, постоянно втыкался на эту ветку.
Суть в чем. Стояла задача чтоб когда находишься на странице которая находится в контейнере например «Продукция», подставлялся в параметр класса «active» делая в меню ссылку «Продукция» другого цвета. И даже перейдя на страницу самой продукции, в меню она тоже оставалась активной. В общем порядок получился такой:
Установил инструмент pdoTools (отсюда)
Потом в чанке, например в коде меню
[[*id:is=`3`:then=` active`]] — если id страницы = 3, то сделать активным меню «Фото и видео»
Суть в чем. Стояла задача чтоб когда находишься на странице которая находится в контейнере например «Продукция», подставлялся в параметр класса «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, то сделать активным меню «Фото и видео»
Судя по всему вам нужно воспользоваться pdoMenu.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.