RealAdmin.ru

Замена getResources на pdoResources в MODX Revolution

MODX,pdoTools
Категория: Сайтострой
14 сен 2013 г. в 12:49

Вчера я решил попробовать заменить на сайте snippet вывода ресурсов «getResources» на «pdoResources». Результат превзошел все мои ожидания. Время загрузки кешируемой главной страницы уменьшилось с 1.1 сек до 0.76 сек.

Переход занимает менее 10 минут. Достаточно установить из репозитория пакет pdoTools (про пакет «pdoTools» и остальные его сниппеты я написал отдельную статью - pdoTools в MODX Revoluton - замена стандартных сниппетов) и сделать несколько правок.

Меняем название getResources на pdoResources

Само собой разумеющийся пункт и здесь хотелось бы лишь отметить, что если для вывода ресурсов у вас используется постраничная навигация («getPages»), то это никак не помешает переходу. Точно так же применяйте вместо элемента вывода getResources - pdoResources. Различие в параметрах будет лишь одно. О нем ниже.

includeTVs - включение TV параметров в вывод ресурсов

В «getResources» указывается значение 1 если требуется включать TV параметры в результат вывода и 0, если не требуется:

&includeTVs=`1`

В «pdoResources» необходимо указывать имена TV параметров, которые требуется включить в результат вывода, через запятую:

&includeTVs=`img-news,tags`

Вывод даты публикации ресурса

В getResources:
Опубликовано: [[+publishedon:strtotime:date=`%d %b %Yг. в %H:%M`]]
В pdoResources убираем промежуточную функцию strtotime:
Опубликовано: [[+publishedon:date=`%d %b %Yг. в %H:%M`]]

Замена «getResourcesTag»

Вместе с «getResources» идет сниппет «getResourcesTag», который выводит ресурсы по тегу. «pdoResources» может заменить и его. Я реализовал замену включением в «pdoResources» следующего параметра:

&where=`{"tags:LIKE":"%[[!getUrlParam? &name=`tag`]]%"}`

Он указывает на то, что требуется вывести только те статьи, у которых в TV-поле «tags» встречается слово, передаваемое в адресной строке в параметре «tag».

Для получения этого параметра я использую snippet «getUrlParam». Устанавливается он из репозитория как обычный пакет. Он предназначен для вывода значения переменной, передаваемой в адресной строке методом GET.

Параметр «conditionalTpls»

На самом деле, этот пункт здесь лишний, так как данный параметр есть как у первого сниппета, так и у второго. Однако, узнал я о его существовании только когда начал разбираться c «pdoResources».

&conditionalTpls - параметр применяется в сниппетах pdoResources/getResources при необходимости осуществить вывод отдельных ресурсов в «свои» чанки:

[[!pdoResources? 
    &parents=`2` 
    &tpl=`chunk1` 
    &tplCondition=`pagetitle` 
    &tplOperator=`==` 
    &conditionalTpls=`{"Статья 2":"chunk2", "Статья 5":"chunk3"}` 
]]

&tplCondition — Поле ресурса, из которого будет получено значение для выбора чанка по условию в «conditionalTpls». Например: pagetitle или alias.

&tplOperator — Оператор сравнения, возможный список:
==, !=, < , > , <=, >=, empty, !empty, isnull

&conditionalTpls — строка с массивом, в котором указано то, с чем будет сравниваться «tplCondition», а в значениях — чанки, которые будут использованы для вывода, если сравнение будет успешным.

Теги:
Посмотрите похожее — 6
Комментарии — 12
  1. avatar xaker777 22 ноября 2017, 22:08 #
    сделай уроки по созданию блога на modx revo нормального уроков нету негде
    1. avatar Simkin Andrew 23 ноября 2017, 10:36 #
      Есть на эту тему статьи на других сайтах. Правда, не везде все актуально и нормально написано. Возможно напишу, но когда время будет на это — неизвестно.
    2. avatar Николай 01 марта 2017, 16:19 #
      Большое спасибо за объяснение работы «Параметр «conditionalTpls»»
      1. avatar Simkin Andrew 04 марта 2017, 13:08 #
        Спасибо тому кто придумал. Полезная вещь, хотя мало кто использует и знает о нём.
        1. avatar Николай 04 марта 2017, 13:10 #
          Благодаря вам, знает намного больше людей))
      2. avatar Дмитрий 21 января 2016, 11:36(был изменён) #
        Ребят ну подскажите. Делаю вывод новостей на главную. Снипет выводит не из раздела новостей. А просто с самой главной странице. Ну тоесть в блоке на главной вместо названия новости(pagetitle) показывает Главная, тобиш берет с открытой страницы.
        [[pdoResources?
        	&tpl=`newstpl`
        	&parents=`16`
        	&includeContent=`1`
        	&depth=`20`
        	&limit=`20`
        	&showHidden=`1`
        ]]
        
        1. avatar Simkin Andrew 21 января 2016, 11:46 #
          В чанке newstpl скорее всего косяк, там перед pagetitle должен быть плюс, а у тебя видимо звёздочка. Меняй там все звёздочки на плюсы.
          1. avatar Дмитрий 21 января 2016, 11:49 #
            Огромное спасибо. Да действительно. Просмотрел этот момент
        2. avatar Руслан 24 декабря 2015, 22:10 #
          Всё разобрался. Где то была опечатка. Мою писанину можно удалять!
          1. avatar Simkin Andrew 25 декабря 2015, 09:34 #
            ok
          2. avatar Руслан 18 декабря 2015, 23:11 #
            К стати в параметрах ввода тв поля ставил URL и текст. Разницы нет. Такое ощущение что PDoresurces вообще не понимает к какому ресурсу обратиться за этим твполем. Причём поле с картинкой выводится исправно.
            1. avatar Руслан 18 декабря 2015, 23:07(был изменён) #
              Здорова, Андрей!
              Смотрю сайт твой набирает популярность. Как всегда нужна твоя помощь. В основном только от тебя дельные советы и получаю.
              В общем проблема такая. В pdoresurs не правильно обрабатывается тв поле с внешней ссылкой. У каждого ресурса будет внешняя ссылка на сайт разработчика. Но вместо этой ссылки получается ссылка типа мойсайт.ру/[­[+tv.gamesite]]

              Вызов pdoresurces
              [[!pdoResources? &showHidden=`1` &tpl=`blogPostgame` &includeTVs=`images,gamesite` &parents=`5` ]]

              В шаблоне blogPostgame:
              <div class="vendor">
                  <h2>[[+pagetitle]]</h2>
              	<a href="[[~[[+id]]]]"><img alt="" src="[[+tv.images:phpthumbof=``]]"></a>
              	<div class="text_otstup">[[+introtext]]</div>
                <div class="text_knop">
                       <div class="kp"><a class="knop" target="_blank" href="[­[+tv.gamesite]]">Играть</a></div>
              	     <div class="kp"><a class="knop" href="[[~[[+id]]]]">Подробнее</a></div>
                </div>
              </div>
              © REALADMIN.RU   2017 г.
              Страница сгенерирована: 0,1356 s | 10 mb.
              На каком уровне Вы играете в шахматы?
              О П Р О С
              Home Question Top