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
Комментарии — 7
  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>
    1. avatar Руслан 18 декабря 2015, 23:11 #
      К стати в параметрах ввода тв поля ставил URL и текст. Разницы нет. Такое ощущение что PDoresurces вообще не понимает к какому ресурсу обратиться за этим твполем. Причём поле с картинкой выводится исправно.
      1. avatar Руслан 24 декабря 2015, 22:10 #
        Всё разобрался. Где то была опечатка. Мою писанину можно удалять!
        1. avatar Simkin Andrew 25 декабря 2015, 09:34 #
          ok
        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 #
              Огромное спасибо. Да действительно. Просмотрел этот момент
          © REALADMIN.RU   2016 г.
          Страница сгенерирована: 0,0960 s | 10 mb.
          На каком уровне Вы играете в шахматы?
          О П Р О С
          Home Question Top