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

Замена getResources на pdoResources в MODX Revolution
Комментарии: 16

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

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

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

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

Включение 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», а в значениях — чанки, которые будут использованы для вывода, если сравнение будет успешным.

Темы:
MODX
Ещё интересное — 6
Комментарии —
  1. Руслан
    Руслан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. Руслан
      Руслан18 декабря 2015, 23:11#
      К стати в параметрах ввода тв поля ставил URL и текст. Разницы нет. Такое ощущение что PDoresurces вообще не понимает к какому ресурсу обратиться за этим твполем. Причём поле с картинкой выводится исправно.
      1. Руслан
        Руслан24 декабря 2015, 22:10#
        Всё разобрался. Где то была опечатка. Мою писанину можно удалять!
        1. Andy Si25 декабря 2015, 09:34#
          ok
        2. Дмитрий
          Дмитрий21 января 2016, 11:36(был изменён)#
          Ребят ну подскажите. Делаю вывод новостей на главную. Снипет выводит не из раздела новостей. А просто с самой главной странице. Ну тоесть в блоке на главной вместо названия новости(pagetitle) показывает Главная, тобиш берет с открытой страницы.
          [[pdoResources?
          	&tpl=`newstpl`
          	&parents=`16`
          	&includeContent=`1`
          	&depth=`20`
          	&limit=`20`
          	&showHidden=`1`
          ]]
          
          1. Andy Si21 января 2016, 11:46#
            В чанке newstpl скорее всего косяк, там перед pagetitle должен быть плюс, а у тебя видимо звёздочка. Меняй там все звёздочки на плюсы.
            1. Дмитрий
              Дмитрий21 января 2016, 11:49#
              Огромное спасибо. Да действительно. Просмотрел этот момент
          2. Николай
            Николай01 марта 2017, 16:19#
            Большое спасибо за объяснение работы «Параметр «conditionalTpls»»
            1. Andy Si04 марта 2017, 13:08#
              Спасибо тому кто придумал. Полезная вещь, хотя мало кто использует и знает о нём.
              1. Николай
                Николай04 марта 2017, 13:10#
                Благодаря вам, знает намного больше людей))
            2. xaker777
              xaker77722 ноября 2017, 22:08#
              сделай уроки по созданию блога на modx revo нормального уроков нету негде
              1. Andy Si23 ноября 2017, 10:36#
                Есть на эту тему статьи на других сайтах. Правда, не везде все актуально и нормально написано. Возможно напишу, но когда время будет на это — неизвестно.
              2. biper
                biper10 июля 2018, 07:07#
                На странице http://fenix.petrovich-design.ru/rezultat-po-zaprosu.html вывожу выборку статей по запросу (по тегам)
                [[!pdoResources? &parents=`0` &pageVarKey=`0` &includeTVs=`image,tags` &processTVs=`tags` &includeContent=`1` &tpl=`articleTpl` &limit=`6` &where=`{«tags:LIKE»:"%[[!pdoResources? &name=`tag`]]%"}` &sortby=`{«publishedon»:«DeSC»}` &toPlaceholder=`results` &showHidden=`1` &hideContainers=`true` ]]

                [[!+results]] [[!+page.nav]]

                сделал все по инструкции. Выводятся ВСЕ статьи, как ни бился. Что не так?
                1. Андрей
                  Андрей05 июля 2019, 09:52#
                  Добрый день!

                  А не подскажите начинающему пользователю, как мне вывести TV с прикрученным сниппетом в pdoPage.
                  Идея след. Есть TV поле ~PRICE.
                  Я хотел сделать, чтобы вывод был в формате с пробелами. ( 1000000 / 100 000 )

                  Использовал сниппет:
                  <?php
                  if(strlen($input)==0) return '';
                  $input = floatval(str_replace(array(' ',','), array('','.'), $input));
                  return number_format($input,(floor($input) == $input? 0: 2),'.',' ');
                  Вызов — [[*price:num_format]]

                  Все отображается корректно если выводить TV поле. А вот как в pdo Page это дописать не знаю.
                  "&includeTVs=`images,price`"

                  Как-то так. Заранее благодарю!
                  1. Andy Si05 июля 2019, 11:02#
                    Добрый… в шаблоне вывода указывать [[+tv.price:num_format]]
                    1. Андрей
                      Андрей05 июля 2019, 12:06#
                      Вот я не умный. Действительно, забыл, что у нас есть отдельный чанк вывода.
                      Самое интересное, в карточке объекта поправил, а тут затупил! =)
                      Ну, зато теперь точно такое не забуду.

                      Благодарю! Все заработало!
                  © REALADMIN.RU   2024 г.
                  Страница сгенерирована: 0,2111 s | 4 mb.
                  На каком уровне Вы играете в шахматы?
                  OPROS