Вывод ресурсов при помощи pdoResources

MODX Revo

Последнее изменение поста: 18 декабря 2016 в 15:59

Приветствую вас уважаемые читатели! В предыдущих статьях мы наполнили сайт контентом, сделали меню и хлебные крошки. Сегодня мы изучим сниппет pdoResources, который входит в состав пакета PdoTools и предназначен для вывода ресурсов в любом оформлении на любой странице.

В моем случае мне нужно заменить статический контент на главной странице (из чанка content), если вы помноте он выглядит так:

chank-content

А статический код этого чанка сейчас такой:

<div class="row text-center">
 <div class="col-xs-12 col-sm-6 col-md-4">
  <p class="title"><a href="[[~8]]"><img class="img-resp" src="assets/img/1.png" alt="Вертикальные"><br>Вертикальные</a></p>
 </div>
 <div class="col-xs-12 col-sm-6 col-md-4">
  <p class="title"><a href="[[~9]]"><img class="img-resp" src="assets/img/2.png" alt="Горизонтальные"><br>Горизонтальные</a></p>
 </div>
 <div class="col-xs-12 col-sm-6 col-md-4">
  <p class="title"><a href="[[~10]]"><img class="img-resp" src="assets/img/3.png" alt="В форме креста"><br>В форме креста</a></p>
 </div>
 <div class="col-xs-12 col-sm-6 col-md-4">
  <p class="title"><a href="[[~11]]"><img class="img-resp" src="assets/img/4.png" alt="Детские"><br>Детские</a></p>
 </div>
 <div class="col-xs-12 col-sm-6 col-md-4">
  <p class="title"><a href="[[~12]]"><img class="img-resp" src="assets/img/5.png" alt="Импортные"><br>Импортные</a></p>
 </div>
 <div class="col-xs-12 col-sm-6 col-md-4">
  <p class="title"><a href="[[~13]]"><img class="img-resp" src="assets/img/6.png" alt="Мемориальные комплексы"><br>Мемориальные<br/>комплексы</a></p>
 </div>
</div>

По идее все можно оставить и так, ссылки прописаны (<a href=»[[~13]]»>), все работает. Если бы я делал сайт для себя возможно так бы все и оставил, но сайт не для себя, а для человека который далек от веб-дизайна, да и мало ли появиться новый раздел или удалиться какой нибудь раздел, не лазить же постоянно по коду и удалять (добавлять) зад назад. По то эму его лучше сделать динамичным. И так начнем.

Первым делом создаем чанк где будет формироваться оформление и контент, назовем его «home» и вставим в него повторяющуюся часть кода:

 <div class="col-xs-12 col-sm-6 col-md-4">
  <p class="title"><a href="[[~8]]"><img class="img-resp" src="assets/img/1.png" alt="Вертикальные"><br>Вертикальные</a></p>
 </div>

Если вы заметили у меня 6 таких однотипных блоков. Теперь сделаем этот блок динамичным:

 <div class="col-xs-12 col-sm-6 col-md-4">
  <p class="title"><a href="[[+uri]]"><img class="img-resp" src="[[+tv.image]]" alt="[[+pagetitle]]"><br>[[+pagetitle]]</a></p>
 </div>

Краткий разбор:

  • [[+uri]] — формирует ссылку на ресурс
  • [[+tv.image]] — выводит изображение из дополнительного поля image
  • [[+pagetitle]] — заголовок ресурса

Теперь удаляем все статическое содержимое из этого чанка и вызываем все это содержимое при помощи pdoResources.

<div class="row text-center">
[[pdoResources?
 &parents=`7`
 &depth=`0`
 &tpl=`home`
 &includeTVs=`image`
 &sortdir=`ASC`
]]
</div>

Краткое описание параметров:

&parents =`7` - родители ресурсов (0 - все ресурсы)
&depth =`0`- уровень вложенности 
&tpl =`home` - чанк оформления, для вывода ресурсов
&includeTVs =`image` - подключаем TV поля (через запятую)
&sortdir =`ASC` - направление сортировки

Подробнее обо всех параметрах, читайте в официальной документации: docs.modx.pro/components/pdotools/snippets/pdoresources

Таким образом можно вывести практически все что угодно.

Да точно таким же образом можно все вывести при помощи PdoPage и в добавок к тому если много ресурсов для вывода, то их можно разбить на страницы, об этом в следующем уроке: Вывод ресурсов при помощи pdoResources

Оценить статью
web-revenue.ru
Добавить комментарий

  1. Дмитрий Шилов

    Добрый день. Не получается вывести ресурсы через pdoResources и через pdoMenu. Смысл — оформление страницы каталога продаваемого имущества. На корневой странице каталога собрать матрицу 3х3 из блоков-ссылок на категории имущества. Блоки представить картинками, картинки — в TV переменных каждой категории. Сделал ВСЕ, посмотрел все варианты и ошибки в инете — ничего не подходит к моему случаю. Блоки выводятся, являясь ссылками, ссылки верные, место под картинку форматируется, но картинки не грузятся. при просмотре кода страницы в атрибуте srs вместо ссылки пустое место » «. При этом с этим же синтаксисом на Локальном сервере получилось — НО ТОЛЬКО ЧЕРЕЗ PDOMENU, через pdoResources пустая сетка блоков.. На реальном сервере в обоих случаях пустые блоки

    ЧАНК

    Вызов

    [[pdoMenu?
    &parents=`7`
    &depth=`0`
    &tpl=`Catalog_cat`
    &includeTVs=`CAT`
    &sortdir=`ASC`
    &countChildren>`0`
    ]]
    результат в фото.

    ТВ вывожу правильно, по умолчанию… пробовал убрать теги в ЧАНКЕ и выводить как картинку.. При этом на странице категории указываю ТВ в контенте и картинка выводится.. в каталог этот ТВ не читается

    Ответить
    1. Alex87
      Ответить
      1. Дмитрий Шилов

        без изменения… и я уже писал, что синтаксис выводит правильно картинку из ТВ на самом ресурсе, а вот в каталоге через pdo не хочет…кстати, в описании pdoResources и pdoMenu написано, что образуются разные плейсхолдеры при &includeTV — в первом случае с tv., а во втором случае — без). В любом случае, картинки (адреса картинок) не выводит именно в PDO…Чанки работают прекрасно в самих дочерних страницах, которым принадлежат TV, изображение и ссылки выводятся (если не использовать tv.). Но на родителя через PDO картинки не выводятся никак.. страноо что на локалке получилось через пдоМеню

        Ответить
        1. Alex87

          опечатка &countChildren>`0` . Все должно выводится

          Ответить
          1. Дмитрий Шилов

            Убейте меня.. но ничего не выводится. &CjontChildren>`0` вообще попало в мой вывод из за танцев с бубнами… я его убрал совсем.. результат тот же..(((((

          2. Alex87

            купите сборку мою и смотрите как что сделано) — сэкономит кучу времени и нервов)

          3. Дмитрий Шилов

            в неверном порядке мои посты опубликовались)

          4. Alex87

            &sortby и &sortdir в помощь)

          5. Дмитрий Шилов

            Восстановил сайт из резерва , созданного сразу после установки новой MODX. Заново установил компоненты… Все стало работать. Видно что то криво встало. Раз уж потревожил, у меня вопрос — а как сделать так, чтобы картинки-ТВ-шки -ссылки в PDOMenu выводились бледными (или в нечетко, как неактивные) при отсутствии у этих категорий вложенных элементов (товаров)? правильно я понимаю, что надо для этого два чанка создать с разными стилями-классами, и использовать поле условия? Задача проще — как сделать так чтобы выводились только те картинки, у ресурсов которых есть вложенные товары? Через &where? Я с JSON плохо знаком

          6. Alex87

            При помощи CSS и картинки и ссылки можно сделать бледными. Да через &where скорее всего

  2. Сергей Стояльцев

    Добрый день. А как вывести поле Migx через pdoResources? Есть урок по этому вопросу?

    Ответить
    1. Alex87

      На данный момент у меня такого урока нет.
      У getImageList есть параметр docid:
      [[getImageList?
      &docid=`7`
      &tvname=`tv-name`
      &tpl=`****`
      ]]
      Если надо в чанке pdoResources, то можно так:
      [[getImageList?
      &value=`[[+tv.tv-name]]`
      ]]
      tv-name— имя Вашего MIGX-поля.

      Ответить
  3. Сергей Скопов

    Алексей, может, вы мне подскажете, а то я всю бошку сломал.
    Прежде, чем выводить динамически, решил проверить статическим кодом.

    Есть шаблон «Новая запись», в нем прописаны чанки:
    [[$head]]
    [[$header]]
    [[$left-menu]]
    [[$tpl.[[*template]]]] — проблема тут
    [[$footer-events]]

    В чанке tpl.5 (у «Новой записи» id — 5) так же прописан код:

    Статьи

    [[$articleprew]]

    Т.е. я просто хочу протестировать вывод чанка articleprew. Но он не выводится. От слова «совсем».
    В нем прописано следующее:


    [[+pagetitle]]

    [[*introtext]]

    Может, подскажете, в чем проблема?

    Ответить
    1. Alex87

      Не нравиться мне ваш вывод) Так сразу не отвечу) Скиньте мне доступы на почту web-revenue@yandex.ru посмотрю и скажу

      Ответить