Замена getResources на pdoResources в MODX Revolution
Вчера решил попробовать заменить на сайте вывода ресурсов с «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:
В pdoResources убираем промежуточную функцию «strtotime»:
Замена «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», а в значениях — чанки, которые будут использованы для вывода, если сравнение будет успешным.
Смотрю сайт твой набирает популярность. Как всегда нужна твоя помощь. В основном только от тебя дельные советы и получаю.
В общем проблема такая. В pdoresurs не правильно обрабатывается тв поле с внешней ссылкой. У каждого ресурса будет внешняя ссылка на сайт разработчика. Но вместо этой ссылки получается ссылка типа мойсайт.ру/[[+tv.gamesite]]
Вызов pdoresurces
[[!pdoResources? &showHidden=`1` &tpl=`blogPostgame` &includeTVs=`images,gamesite` &parents=`5` ]]
В шаблоне blogPostgame:
[[!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]]
сделал все по инструкции. Выводятся ВСЕ статьи, как ни бился. Что не так?
А не подскажите начинающему пользователю, как мне вывести 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`"
Как-то так. Заранее благодарю!
Самое интересное, в карточке объекта поправил, а тут затупил! =)
Ну, зато теперь точно такое не забуду.
Благодарю! Все заработало!