Документация сниппета getResources для MODx Revolution. Getresources modx revo документация


Все о компьютерах - Документация сниппета getResources для MODx Revolution

getResources – это сниппет MODX Revolution, который извлекает содержимое полей из других ресурсов и выводит его в любом удобном для вас виде.

Использование

[[getResources]]

Если не задать параметр &tpl будет выводить массив данных полей вложенных ресурсов, но для этого используйте &debug=`1`

Параметры

Параметры шаблона
НазваниеОписаниеПо умолчанию
tpl Имя чанка, который выступает как шаблон ресурсов. В случае если шаблон не найден, данные будут выводиться в виде массива  
tplOdd Имя чанка, который выступает как шаблон с нечетным индексом (смотрите параметр idx)  
tplFirst Имя чанка, который выступает как шаблон для первого ресурса  
tplLast Имя чанка, который выступает как шаблон для заключительного ресурса  
tpl_N Имя чанка, который выступает как шаблон для N-ного ресурса, к примеру &tpl_4=`tpl4th`  
tpl_nN Имя чанка, который выступает как шаблон для каждого N-ного ресурса, к примеру шаблон&tpl_n4=`tpl4th` будет приложен к каждому 4-му элементу  
tplPath Каталог для просмотра чанков на базе файлов с использованием @FILE assets_path + "elements/chunks/"
tplWrapper Название чанка serving как обвёртка шаблона для вывода Примечание: Не работает с toSeparatePlaceholders. Плейсхолдер, где элементы вставленны - [[+output]].  
wrapIfEmpty Если истинна, будет выводить обвёртку указанную в &tplWrapper даже если вывод пуст.  
outputSeparator Доп строка для разделения каждого шаблона. "\n"
toPlaceholder
Если установлен, присвоит результат в этот плейсхолдер вместо вывода напрямую
 
toSeparatePlaceholders Если установлен, присвоит каждый результат разделяющему плейсхолдеру названного с помощью суффикса из значения данного параметра и номера (начиная с нуля)
Свойства (параметры)
НазваниеОписаниеПо умолчанию
parents Список ID родительских ресурсов, разделенные запятыми. Для исключения родительских ресурсов используется ID ресурса со знаком минус.  ID текущего ресурса
resources Список ID ресурсов, разделенные запятыми, которые должны включенны в результат выборки. ID ресурса, который имеет префикс со знаком минус, исключаются из результата выборки.
depth Целочисленное значение, которое указывает глубину поиска ресурсов от родительского элемента. 10
tvFilters

Может применяться для фильтрации ресурсов по конкретным значениям TV.

mytv==somevalue,othertv==othervalue
sortby

Может применяться для сортировки ресурсов по конкретным полям.

&sortby=`{"publishedon":"ASC","createdon":"DESC"}`
createdon
sortbyAlias Сортировка по алиасу  
sortbyTV Сортировка по TV параметру  
limit Лимит выводимых ресурсов. Используйте 0 для снятия ограничения. 5

Примеры

Выводит список дочерних ресурсов текущей страницы с использованием шаблона "MyTpl"

[[!getResources? &parents=`[[*id]]` &tpl=`myTpl`]]

Выводит список дочерних ресурсов 4ой страницы с использованием шаблона "MyTpl", исключая дочерний ресурс с индификатором 7

[[!getResources? &parents=`4` &resources=`-7` &tpl=`myTpl`]]

Выводит только ресурсы с индификаторами 10,11 и 12 с использованием шаблона "MyTpl"

[[!getResources? &parents=`-1` &resources=`10,11,12` &tpl=`myTpl`]]

Выводит список из 5и дочерних ресурсов 5ой страницы с использованием шаблона "MyTpl", включая содержимое дочерних ресурсов

[[!getResources? &parents=`5` &limit=`5` &tpl=`MyTpl` &includeContent=`1`]]

Оригинальная информация по сниппету на английском:

aboutcomputers.ru

getResources - Дополнения - RTFM

Что такое getResources?

Общая цель — вывод списков Ресурсов и обощающий сниппет.

Требования

История

getResources был написан Джейсоном Ковардом (Jason Coward, aka opengeek) и выпущен 30 июня 2009.

Загрузка

Пакет можно загрузить из админки MODx Revolution через (link)Управление пакетами или из репозитория дополнений MODx, здесь: http://modxcms.com/extras/package/552

Это НЕ замена Ditto, а альтернативный компонент, который может выполнять некоторые задачи, которые делают более специализированные компоненты, например Ditto, Wayfinder, Breadcrumbs; в основном все, которые задают свойства для списка ресурсов (раньше Документы в MODx Evolution)

Использование

Сниппет getResources может быть вызван при помощи тега:

<code>

Вызовы без заданного параметра &tpl будет просто выводить массив в виде списка каждого конечного ресурса и его полей.

Доступные параметры

Параметры шаблонизации
tplИмя чанка, выступающего в качестве шаблона для ресурса. Если не установлен, свойства выдаются в виде списка для каждого ресурсаtplOddИмя чанка, выступающего в качестве шаблона для ресурсов с нечетным индексом (см. параметр idxtplFirstИмя чанка, выступающего в качестве шаблона для первого ресурсаtplLastИмя чанка, выступающего в качестве шаблона для последнего ресурсаtpl_NИмя чанка, выступающего в качестве шаблона для N-ного ресурса, например &tpl_4=`tpl4th`tpl_nNИмя чанка, выступающего в качестве шаблона для каждого N-ного ресурса, например шаблон &tpl_n4=`tpl4th` будет применен к каждому элементу, порядковый номер которого кратен 4 Добавлено в версии: 1.4.1-pltplPathДополнительный каталог для поиска чанков на основе файлов при использовании биндинга @FILE По умолчанию: assets_path + "elements/chunks/"outputSeparatorДополнительные строки для разделения каждого ресурса после шаблонизации По умолчанию: "\n"toPlaceholderЕсли установлен, присвоит результат в указанный плейсхолдер вместо вывода напрямуюtoSeparatePlaceholdersЕсли установлен, присвоит КАЖДОМУ результату отдельное имя плейсхолдера в виде суффикса из значения этого параметра и порядкового номера (начиная с 0) Добавлено в версии: 1.3.0
@FILE и @INLINE шаблоны

Вы можете указать любому шаблону в качестве префикса @FILE или @INLINE для использования чанков, основанных на файлах или просто разметки соответственно.

Параметры выборки
parentsСписок идентификаторов родительских ресурсов, разделенных запятыми. Используйте -1 для исключения родительских ресурсов. По умолчанию: current Resource idresourcesСписок идентификаторов ресурсов, разделенных запятыми, для включения их в результат выборки. Префикс в виде минуса исключает ресурсы из результата выборки.depthЦелое число, указывающее глубину поиска для ресурсов от каждого из родителей. По умолчанию: 10tvFilters

Может использоваться для фильтрации ресурсов по определенным значениям переменных шаблона (TV). Они задаются как [(tvname)(operator)](value). Можно использовать два разделителя для объединения условий фильтра.

У вас могут быть фильтры с условием "ИЛИ" (OR) в виде двойной вертикальной черты. OR-фильтр получает ресурсы, которые имеют одно из перечисленных значений переменной шаблона (TV).

<code>mytv==somevalue||mytv==othervalue

Вы также можете использовать фильтр "И" (AND) используя запятую. Этот фильтр проверит, чтобы все условия выполнялись.

<code>mytv==somevalue,othertv==othervalue

Для тонкой фильтрации вы можете также группировать их. Важно знать, что сначала идут условия, разделенные по условиям ИЛИ (||), затем условия И (,). Давайте посмотрим такой пример:

<code>mytv==foo||mytv==bar,bartv==3||bartv==1

Русуры будут отфильтрованы по одному из следующих условий (на самом деле в запросах к БД используется функция LIKE):

Приведенные выше примеры ищут точные совпадения. Если вы хотите, вы также можете использовать знак процента (%) в качестве шаблона. Например:

<code>mytv==%a%

Находит любые ресуры, которые имеют "a" в значении mytv.

<code>mytv==a%

Находит любые ресурсы, значение mytv которых начинается с "a" и содержит все что угодно после "a".

<code>mytv==%a

Находит любые ресурсы, которые которые имеют значение mytv, заканчивающееся на "a" и содержащее все что угодно до "a".

И конечно, вы можете совмещать это с OR (||) и AND (,) разделителями, которые описаны выше.

Важно знать, что эта функция смотрит на исходные значения переменных шаблона, заданные для конкретного ресурса. Это значит, что значение было установлено для ресурса и что оно не будет обработано как переменная шаблона с типом вывода (или значение по умолчанию в релизах до 1.4.2-pl; в этом релизе добавлена поддержка фильтрации, которая включает значения по умолчанию). Так что если у вас есть переменная шаблона "autotag", это значит, что исходное значение представляет собой список тегов, разделенных запятыми и оно не распалось на теги так, как это видно в админке.

Новые операторы в фильтрах доступны в 1.4.2-pl

Начиная с релиза getResources 1.4.2-pl имеется целый ряд новых операторов сравнения, которые можно использовать при построении условий фильтрации. Кроме этого, при использовании многих из этих новых операторов при сравнении с числовыми значениями значения переменных шаблона автоматически приводятся к числовым типам. Вот список новых операторов:

<=> — безопасное сравнение с NULL

Оператор фильтраОператор SQLПриведение к числу
<=> <=> Да
=== = Да
!== != Да
<> <> Да
== LIKE Нет
!= NOT LIKE Нет
<< < Да
<= <= Да
=< =< Да
>> > Да
>= >= Да
=> => Да
sortby

Любое поле ресурса (за исключением переменных шаблона) для сортировки. Некоторые из общих полей для сортировки - это publishedon, menuindex, pagetitle и др., но смотрите документацию по ресурсам для всех полей. Укажите только имя поля, без использования синтаксиса тегов. Обратите внимание, что при использовании таких полей, как template, publishedby и подобных для сортировки, они будут сортироваться по сырым значениям, таким как ID шаблона или юзера, а не по их именам.

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

<code>&sortby=`RAND()`

Начиная с версии 1.3.0 это также может быть JSON массив для сортировки по нескольким полям, например:

<code>&sortby=`{"publishedon":"ASC","createdon":"DESC"}`

Если вы хотите сортировать в определенном порядке, вы можете сделать это, указав список идентификаторов ресурсов следующим образом:

<code>&sortby=`FIELD(modResource.id, 4,7,2,5,1 )`

Тоже самое возможно, если вы передадите список ID для сортировки в переменной шаблона, например:

<code>&sortby=`FIELD(modResource.id,)`

По умолчанию: publishedon Добавлено в версии: 1.3.0

sortbyAliasПсевдоним запроса для поля из sortbysortbyEscapedЭкранировать имя поля заданного в sortbysortdirПорядок сортировки По умолчанию: DESCsortbyTVПеременная шаблона (Template Variable) для сортировки Добавлено в версии: 1.2.0sortdirTVПорядок сортировки при использовании sortbyTV По умолчанию: DESC Добавлено в версии: 1.2.0sortbyTVTypeУказывает тип данных сортировки по TV. Возможные значения: string, integer, decimal, datetime По умолчанию: string Добавлено в версии: 1.3.0limitОграничение количества возвращаемых ресурсов По умолчанию: 5offsetСмещение ресурсов для пропуска, которые возвращаются в соответствии с критериями По умолчанию: 0whereВыражение критериев в json-стиле для построения любых дополнительных условий. Смотрите ниже пример. Подробнее {http://rtfm.modx.com/display/xPDO20/xPDOQuery.wherecontextВ каком контексте следует искать. По умолчанию текущий контекст.
Другие параметры
showUnpublishedЕсли true, то будут показаны также ресурсы, которые не опубликованы. По умолчанию: 0showDeletedЕсли true, то будут показаны ресурсы независимо от того, удалены они или нет. По умолчанию: 0showHiddenЕсли true, покажет ресурсы независимо от того, показываются они в меню или нет. По умолчанию: 0hideContainersЕсли указан, то не будут показаны ресурсы, помеченные как контейнер (is_folder). По умолчанию: 0includeContentУказывает, что содержание каждого ресурса должно возвращаться в результатах выборки. По умолчанию: 0includeTVsУказывает, что значения переменных шаблона должны быть включены в набор свойств, доступных для каждого шаблона ресурса По умолчанию: 0includeTVListДополнительный список разделенных запятыми имет переменных шаблона для явного включения в результат, если includeTVs установлен в 1 Добавлено в версии: 1.4.0processTVsУказывает, что переменные шаблона должны быть отрисованы так как они были бы представлены в ресурсе. Переменные шаблона должны быть включены для обработки (см. includeTVs/includeTVList). По умолчанию: 0processTVListДополнительный список имен переменных шаблона, разделенных запятыми, для явной обработки. Переменные шаблона, заданные здесь, должны быть включены через includeTVs/includeTVList Добавлено в версии: 1.4.0tvPrefixПрефикс для свойств в виде переменных шаблона По умолчанию: tv.idxВы можете задать начало idx ресурсов, что представляет собой свойство, котороые увеличивается с каждым отрисованным ресурсом По умолчанию: 1firstЗадает idx, который представляет собой первый ресурс По умолчанию: 1lastЗадает idx, который представляет последний ресурс. По умолчанию это количество ресурсов, которые будут складываться + первый - 1 (?)totalVarЗадает ключ плейсхолдера, устанавливаемого getResources для показа общего количества ресурсов, которые будут выбраны не учитывая значения limit. По умолчанию: totaldebugЕсли true, будет записывать sql-запросы в log MODx. По умолчанию: false

Доступные плейсхолдеры

Плейсхолдеры доступные в ваших чанках форматирования getResources в основном зависят от ресурсов, которые вы перечисляете.

См. Все теги на странице "Часто используемые теги шаблона" — это список свойств, доступных для всех ресурсов.

Если ваш ресурс имеет переменные шаблона, те в свою очередь будут иметь соответствующие плейсхолдеры (помните, что плейсхолдеры будут использовать префикс, заданный через параметр &tvPrefix)

Кроме того, существуют следующие плейсхолдеры:

ПлейсхолдерОписание
<code> Увеличивается с каждой итерацией, начиная с 1 (или со значения, установленного параметром &idx)

Примеры

Смотрите также подраздел Примеры этой документации для ознакомления с более подробными примерами и обучающими материалами.

Вывод списка дочерних ресурсов текущего ресурса, используя чанк 'myRowTpl':

<code>

Вывод всех дочерних ресурсов ресурса с ID '5', за исключением ресурса 10, используя чанк 'myRowTpl':

<code>

Вывод только заданных ресурсов, используя чанк 'myRowTpl':

<code>

Вывод последних 5 опубликованных ресурсов, у которых родительский ресурс с ID '5', используя шаблон 'blogPost':

<code>

Вывод списка дочерних ресурсов текущего ресурса, основанного на шаблоне ресурсов:

<code>

Вывод списка дочерних ресурсов текущего ресурса, где ID шаблона ресурсов равен 1 или 2:

<code>

Вывод списка дочерних ресурсов текущего ресурса, где ID шаблона ресурсов равен 1, 2 или 3 (вы не можете использовать тот же ключ больше одного раза):

<code>

Показ сообщения, когда ничего не найдено (эквивалент "empty" в Ditto):

<code>

Показ переменных шаблона (Template Variables) с getResources

Чтобы уменьшить время обработки, getResources не получает значения TV по умолчанию. Если вы хотите показывать TV, вы должны включить следующие параметры:

<code>&includeTVs=`1` &processTVs=`1`

Вам также нужен либо префикс для всех TV с tv. или использовать этот параметр в теге вашего сниппета:

<code>&tvPrefix=``

В чанке tpl, который вы используете для вывода getResources, используйте тег плейсхолдера как здесь (но с именем вашего TV):

<code>

Использование getPage для постраничной навигации

В сочетании с getPage getResources позволяет делать мощные и гибкие нумерации ваших страниц.

Примеры

Берет первые 10 ресурсов, отсортированные по дате публикации (publishedon), которые внутри ресурса с ID 17, не больше чем на 2 уровня в глубину, с шаблоном 'blogListPost', включая переменные шаблона (TV) и содержимое (content):

<code> <div> <ul> </ul> </div>

и чанк blogListPost:

<code> <div> <div></div> <h3><a href="" title=""></a></h3> <p><strong>Author:</strong> <span></span></p> <p></p> <p><a href=""><span>Read more</span></a></p> <div></div> </div> <hr/>

Поиск и устранение неисправностей

Ничего не происходит

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

Выводится массив атрибутов

Вы забыли указать параметр `&tpl`. Без &tpl сниппет будет пытаться определить ресурсы, но вы не сказали ему как их форматировать. Проверьте, указан ли параметр &tpl в вызове вашего сниппета, как тут:

<code>

ИЛИ

Вы допустили ошибку в имени чанка. Возможно у вас и указан &tpl, но чанк действительно существует? Если вы указали имя чанка, который не существует, getResources не будет знать как форматировать ваши ресурсы.

ИЛИ

Даже если вы правильно задали параметр &tpl, возможно, вы случайно забыли амперсанд к одному из ваших других параметров. Например limit=`5` приведет вызов сниппета к фейлу и атрибуты будут выведены без форматирования. Правильный формат должен быть &limit=`5`.

Тот же самый ресурс выводится несколько раз (1.2.2 и предыдущие релизы)

Если вы видите, что один и тот же ресурс показывается несколько раз, попробуйте убрать параметр &sortbyTV.

Содержимого там нет

Вы извлекаете правильные ресурсы и вы видите какие-топравильно отформатированные результаты, но ваш плейсхолдер

<code>

ничего не выводит. Что происходит? Вам нужно указать параметр &includeContent=`1` чтобы получить содержимое.

См. также

Если вам нужно получить одно поле из другого ресурса, попробуйте использовать getResourceField.

modx.by

Как вывести контент в ModX Revolution с помощью GetResources

Что такое getResources?

getResources это сниппет MODX Revolution, который извлекает содержимое полей из других ресурсов и выводит его в любом удобном для вас виде. Если вы знакомы MODX Evolution, getResources может считаться заменой Ditto.

Почему нужно использовать именно getResources?

getResources отлично подходит для случаев, где вам необходимо объединить и вывести информацию от различных ресурсов в одном месте и в необходимом формате. Наиболее очевидным применением сниппета getResources будет создание основной блоговой страницы сайта, другие возможные блоки использования - слайдеры, страница портфолио, новостная лента...

Как использовать сниппет getResources?

Ниже приведён список шагов описывающих процесс использования сниппета getResources. После того, как вы привыкните к его использованию, большинство описанных шагов будут происходить интуитивно, но так как вы только начинаете, то хорошо иметь под рукой некоторое подобие плана действий. Вот один описанный мною:

Я детально и последовательно опишу каждый из описанных выше шагов. Если вы уже разбираетесь в построении шаблонов и разбираетесь в переменных шаблона и других вопросах шаблонизации, то можете смело переходить прямо к 5 шагу.

1. Установка getResources

Я уже установил getResources и мы будем его использовать для создания страницы статьи. Мы будем использовать для шаблона страницы блога шаблон 7 in 1 Business Success Site студии Themeforest. Страница блога (частично) будет выглядеть следующим образом:

Страница блога MODX Revolution

Как видите, у нас есть страница с несколькими компонентами – заголовок, изображение, дата публикации, изображение и отрывок содержания со ссылкой “читать остальную часть записи” к целому посту. Этот шаблон мы будем использовать для объединённого вывода наших статей.

2.Подготовьте шаблон для вывода отдельной статьи:

После установки сниппета getResources, смотрим на оформить стуктуру страниц отдельного вывода статей. Для этого я буду использовать шаблон отдельного поста нашей темы, который я взял из файла single.html.  Я уже портировал данный шаблон в свой шаблон и назвал его “7in1 Single Article”.  Вот как мой “7in1 Single Article” шаблон будет выглядеть:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en-US"> <head profile="http://gmpg.org/xfn/11"> [[$7in1-header]] </head> <body> [[$7in1-logo-nav-search-bar]] <div></div> <div> <div> <div> <div> <div> <div> <span>[[*publishedon:strtotime:date=`%d`]]</span> <span>[[*publishedon:strtotime:date=`%b`]]</span> <span>[[*publishedon:strtotime:date=`%Y`]]</span> </div> <h4><a href="[[~[[*id]]]]" rel="bookmark" title="Permanent Link to [[*pagetitle]]">[[*pagetitle]]</a></h4> </div> <div> <p><a href="[[*id]]"><img title="[[*article_image_title]]" src="[[*article_image]]" alt="" /></a> [[*content]] <div>Tags: <a href="#" rel="tag">tag3</a>, <a href="#" rel="tag">tag5</a>, <a href="#" rel="tag">tag7</a><br /> Posted in <a href="#" title="View all posts in Latest News" rel="category">Latest News</a> | <a href="#comments" title="Comment on Blog Post 5">6 Comments &#187;</a></div> </div> </div> [[$articleCommentStuff_temp]] </div> <!-- end post_content --> [[$7in1-articles-sidebar]] </div> <!-- end container_bkgnd_btm --> </div> <!-- end page_container --> <div></div> <div> </div> [[$7in1-bottomwidgets]] <div> </div> [[$7in1-footer]] </body> </html>

Вы узнаете чанки шапки и подвала, мы уже их использовали, я добавил всего лишь два дополнительных чанка, один для содержимого сайдбара (7in1-articles-sidebar) и одного временного чанка (articleCommentStuff_temp) для секции комментирования, чтобы не нагромождать все элементы. В данный момент эти два чанка содержат статический контент нашего шаблона, но в следующий уроках мы сделаем их динамичными. Так же я добавил две дополнительных переменных шаблона, одну для вывода текста в теге изображения (article_image_title) и другую для самого изображения (article_image – {тип ввода – изображение, тип вывода – текст}).  Также я добавил другие поля, такие как ИД поста, урлы и др., многое из этого должно быть вам понятно из предыдущих уроков.

Последним моментом, на который я хотел обратить ваше внимание -  вывод поля даты. Он производится через publishedon используя при этом функцию PHP strtotime для показа даты в необходимом виде (как в шаблоне нашей темы). Более детально про функцию strtotime и форматирование дат - в конце этого поста ссылки.

Как я уже говорил, содержимое сайдбаров, теги и секция комментариев – статичны и мы над этим вопросом поработаем в следующих уроках.

3. Добавьте статьи

Отлично, теперь у нас есть шаблон для отдельных страниц и можно двигаться дальше. Создадим несколько статей для нашего сайта, используя этот шаблон, таким образом мы сможем проверить наш вызов getResources.  В моём случае я создал контейнер Articles и установил шаблон для него Base Template, который я поменяю позже, когда буду готов выводить объединённый контент. Всередине я размещу парочку контейнеров для каждой категории или темы, которую покрывают мои статьи… например – новости, MODX уроки и др.

Размышляя об этом, я понимаю, что не хочу, чтобы мои статьи выводились в меню, также я хочу, чтобы они все использовали шаблон 7in1 Single Article. В рассуждениях о том, как же лучше сделать легче мою работу или работу клиента, я решил, что так как большинство новых ресурсов будут статьями, то есть здравый смысл в том, чтобы сделать соответствующими настройки по умолчанию для типа содержимого. Другими словами, сделайте все новые ресурсы с этого момента по умолчанию использующими шаблон 7in1 Single Article, а также они должны быть скрытыми от меню. Конечно же, можно отредактировать один за одним все ресурсы и это не будет проблемой, так как остальные мои страницы уже созданы и большинство новых ресурсов буду статьями. Итак, чтобы сделать это, идём System->System Settings, далее фильтр « area» и выбираем “Site”.  Нужные настройки – Default Template, Hide from Menus Default.

 Настойка шаблона по-умолчанию

После внесения изменений наблюдаем такую картину:

 Настройка шаблона по-умолчанию в MODX Revolution

Теперь, при создании нового ресурса, он берёт шаблон отдельной статьи по умолчанию и уже поставлена галочка в Скрыть от меню (Hide From Menus).

Заметка: Обратите внимание, что такое поведение будет в случае, когда документ создаётся в корне. Если же вы зайдёте в любой контейнер и нажмёте «Создать документ здесь» (Create a Document Here), то он возмёт шаблон контейнера и скроет от меню. Поэтому будьте внимательны к настройкам каждого ресурса.

Давайте продолжим и создадим около 8 простых статей для нашего сайта, чтобы сниппет мог их объединить и вывести getResources. Я беру сгенерированный текст отсюда http://www.malevole.com/mv/misc/text/ и произовальные картинки из Гугла.  Позже при наличии времени я заменю этот текст другим необходимым, здесь же в целях обучения будет достаточно наличия любого текста и картинок. Вот как выглядит дерево моего сайта в данный момент:

 Дерево ресурсов MODX Revolution

Теперь можно перейти к следующему этапу, который состоит в том, что мы созданим шаблон для нашей основной страницы блога и далее сформируем вызов сниппета getResources.

4. Подготовка страницы агрегированного контента.

Если вы используете тот же шаблон, что и я, то посмотрите на код и вы увидите, что он почти не отличается от кода для обычного шаблона, но без секции комментирования и других аналогичных элементов, поэтому можно использовать те же чанки и код, что мы использовали ранее. Вот как будет выглядеть шаблон 7in1 Aggregated Articles:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en-US"> <head profile="http://gmpg.org/xfn/11"> [[$7in1-header]] </head> <body> [[$7in1-logo-nav-search-bar]] <div></div> <div> <div> <div> [[*content]] </div> <!-- end post_content --> [[$7in1-articles-sidebar]] </div> <!-- end container_bkgnd_btm --> </div> <!-- end page_container --> <div></div> <div> </div> [[$7in1-bottomwidgets]] <div> </div> [[$7in1-footer]] </body> </html>

Теперь я использую данный шаблон для вывода содержимого ресурсов - дочерних элементов следующих контейнеров – контейнер Articles и каждого из контейнеров для категорий, в моём случае - MODX News, MODX Web Development, MODX Tips and Tricks и Other Stuff.  Теперь одна из категорий будет выглядить приблизительно так:

 Сайт MODX Revolution после изменений

Давайте перейдём к выводу нашего контента.

5. Базовый вызов сниппета getResources

Перед тем, как мы начнём формировать вызов сниппета и работать с getResources, важно познакомится с несколькими вещами, которые могут легко ввести в заблуждение, если вы до этого не были знакомы с getResources и даже если вы знакомы. Я называю их мои getResources уловки!

Есть еще много моментов, но это основные, в которых легко допустить ошибку.

Как и у всех других сниппетов, вызов getResources выглядит так:

[[!getResources]]

Базовый вызов позволит вам убедиться в том, что сниппет работает на нашем сайте. Если я размещу данный вызов на странице Articles page я ничего не получу. Вы можете подумать, что происходит что-то неправильное, но этому есть простое объяснение. Помните наш список находок? По умолчанию getResources ожидает, что ваши ресурсы не будут скрыты от меню, поэтому если вы хотите показать скрытые ресурсы вам необходимо добавить параметр &showHidden и установить его значение в true. Поэтому отредактируйте ваш вызов:

[[!getResources? &showHidden=`1` ]]

Если я перегружу страницу, то вот что я получу:

 Вывод ресурсов без шаблона в MODX Revolution

Выглядит плохо, но это значит, что getResources работает и извлекает контент. Что нам сейчас нужно сделать, так это привести контент к нужному виду и определить какими должны быть наши параметры: например, какие контейнеры использовать для параметра parents, как глубоко в дереве ресурсов делать выборку самих ресурсов, какие поля каждого ресурса мы хотим извлекать на нашу страницу статей и т.д.

6. Создание шаблонирующего tpl чанка для getResources

Для вывода страницы в нужном нам виде, нам необходимо создать чанк для шаблонизации отдельных элементов, которые будет извлекать наш сниппет getResources.  Для этого, я возьму код из статического шаблона, который представляет каждый элемент поста и заменить статические элементы динамическим кодом.

При работе с tpl-чанком мы используем синтаксис заполнителя [[+field_name]] для динамических кусков.

Итак берём HTML код для вывода поста блога в статическом коде файла шаблона blog.html:

<div> <div> <div> <span>06</span> <span>Jan</span> <span>2010</span> </div> <h4><a href="single.html" rel="bookmark" title="Permanent Link to Blog Post 5">Blog Post 5</a></h4> </div> <div> <p><a href="single.html"><img title="slide_7_new" src="sample-data/slide_7_new.jpg" alt="" /></a>This is a test…Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim.</p> . . . <a href="#">Read the rest of this entry &raquo;</a></p> </div> <div>Tags: <a href="#" rel="tag">tag3</a>, <a href="#" rel="tag">tag5</a>, <a href="#" rel="tag">tag7</a><br /> Posted in <a href="#" title="View all posts in Latest News" rel="category">Latest News</a> | <a href="single.html#comments" title="Comment on Blog Post 5">6 Comments &#187;</a></div> </div>

Мы можем использовать данный код как базу нашего tpl чанка. Я заменю статические куски заполнителями. Для короткого содержимого поста я не хочу извлекать содержимое поля Content ресурса, мне нужна лишь короткая выдержка. Поэтому я буду использовать поле аннотация (Introtext) ресурса и далее выводить его, используя конструкцию [[+introtext]] можно также использовать Переменную шаблона [[+tv.tvname]]. Для вывода также можно использовать содержимое ресурса - поле Content. Я могу взять, например, первые 350 символов каждой статьи и вывести. Чтобы это сделать прикрепляю фильтр вывода :ellipsis=350 к моему заполнителю контента.

<div> <div> <div> <span>[[+publishedon:strtotime:date=`%d`]]</span> <span>[[+publishedon:strtotime:date=`%b`]]</span> <span>[[+publishedon:strtotime:date=`%Y`]]</span> </div> <h3><a href="[[~[[+id]]]]" rel="bookmark" title="Permanent Link to [[+pagetitle]]">[[+pagetitle]]</a></h3> </div> <div> <p><a href="[[~[[+id]]]]"><img title="[[+tv.article_image_title]]" src="[[+tv.article_image]]" alt="" /></a> [[+content:ellipsis=`350`]]</p> <a href="[[~[[+id]]]]">Read the rest of this entry &raquo;</a></p> </div> <div>Tags: <a href="#" rel="tag">tag3</a>, <a href="#" rel="tag">tag5</a>, <a href="#" rel="tag">tag7</a><br /> Posted in <a href="#" title="View all posts in Latest News" rel="category">Latest News</a> | <a href="single.html#comments" title="Comment on Blog Post 5">6 Comments &#187;</a></div> </div>

Помните о том, что мы оставляем секцию тегов статической в данный момент, потом к этому мы ещё вернёмся.

Теперь я могу сохранить этот код в чанк, который я назову articleTpl. Далее я изменю мой вызов getResources, добавив туда мой tpl-чанк.

[[!getResources? &showHidden=`1` &tpl=`articleTpl` ]]

Если мы перегрузим нашу страницу Articles, то сразу увидим разницу:

Вывод аннотаций постов блога MODX Revolution

Картинка постепенно оживает!  Мы видим, что выводимый контент отображается с использованием правильного шаблона и мы можем нажать на заголовки, которые ведут на отдельные посты. Но еще предстоит еще много поработать.

Обратите внимание, что если у вас более 5 статей, то только 5 появятся на странице. Так происходит потому что по умолчанию getResources ограничен количеством извлекаемых страниц, которое равно 5.

Вы можете перезаписать данный параметр добавив &limit и указав необходимое количество статей. Я установлю количество статей равным 10, чтобы убедится, что у меня работает всё так как нужно.

Вспоминая наши уловки описанные выше, мы знаем причину того, что аннотации контента не показываются и причину того, что наши заполнители картинок пусты, потому что нам необходимо использовать includeContent, includeTVs и processTVs. Давайте изменим наш вызов и добавим следующие элементы:

[[!getResources? &showHidden=`1` &tpl=`articleTpl` &limit=`10` &includeContent=`1` &includeTVs=`1` &processTVs=`1`]]

Если мы обновим нашу страницу теперь, то увидим изображения и короткие в 350 символов аннотации извлекаемого содержимого, как я указал в шаблонирующем tpl-чанке:

 Вывод аннотаций в блоге MODX Revolution

Теперь наш контент извлекается и выводится нужнім образом, можем продолжить далее и улучшить наш вызов getResources, добавив другие параметры, которые нам могут понадобиться.

7. Добавьте другие параметры к вызову getResources

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

Выбор параметров зависит от поведения сайта, которого нужно добится. В моём случае есть ещё парочка параметров, которые я хотел бы добавить.

Если вы взглянете на вывод, то заметите, что страница Articles извлекается на странице категории, то бишь MODX News, MODX Web Development, MODX Tips & Tricks и Other Stuff. Очевидно, что я этого не хочу. Вместо этого, я хочу обозначить, что эти субконтейнеры являются предками ресурсов, которые я хочу показать и я хочу проникать только на один уровень вниз до этих субконтейнеров. По умолчанию, getResources предполагает, что ресурс, в котором вы разместили вызов вашего сниппета – это родительский ресурс и он показывает все ресурсы под собой и их дочерние ресурсы на глубину равную 10.

Поэтому я изменю мой вызов и добавлю ID субконтейнеров тех ресурсов, которые я хочу включить и определю глубину отображения ресурсов:

[[!getResources? &showHidden=`1` &tpl=`articleTpl` &limit=`10` &includeContent=`1` &includeTVs=`1` &processTVs=`1` &parents=`13,14,15,16` &depth=`1`]]

Теперь данный вызов покажет только статьи сами по себе, а не их родительские контейнеры. Есть еще несколько спобов сделать так же. Например, если вы собираетесь добавить контейнеры других категорий в будущем и не хотите помнить о том, как возвращаться к вызову, чтобы добавить их ID к параметру &parents, то можете использовать &hideContainers=`1` и далее убрать или отредактировать параметр &depth, чтобы он отвечал структуре вашего сайта. В этом случае вы можете полностью убрать &parents, так как getResources будет считать, что вызов сниппета происходит в родительском ресурсе или для завершения редактирования задайте его значение равным [[*id]]:

[[!getResources? &showHidden=`1` &tpl=`articleTpl` &limit=`10` &includeContent=`1` &includeTVs=`1` &processTVs=`1` &parents=`[[*id]]` &hideContainers=`1`]]

Ну вот мы и закончили работу над нашим сниппетом getResources.  Надеюсь, вы нашли что-то для себя полезное и можете разобраться с расскрытым здесь вопросом и использовать это в построении ваших сайтов.

Домашнее задание:

Боковое меню MODX Revolution - домашнее задание

Вот маленькое домашнее задание для вас, чтобы протестировать знания, приобретённые в ходе урока.

uscms.ru

getPage для MODX Revolution. Постраничная навигация

Что такое getPage?

Основное назначение сниппета – презентация, навигация, опциональное кэширование, многостраничный просмотр из различных Элементов, что подразумевает ограничении и изменение свойств для ограничения набора данных, размещение плейсхолдера, с помощью которого getPage возвращать общее число элементов страницы.

Системные требования сниппета getPage

История разработки

getPage написан Jason Coward (opengeek) и опубликован 19 Марта 2010

Этот сниппет ничего не выполняет самостоятельно, и зависит от других сниппетов для возращения выходных данных для определенной страницы (или массива данных в виде определенного набора). К примеру, такие сниппеты как getResources, getFeed, и Archivist могут быть объединены с помощью getPage.

Использование

getPage сниппет может быть вызван с помощью следующего тега:

[[!getPage? &elementClass=`modSnippet` &element=`getResources`]]

Не кэшируйте

getPage не должен вызваться некэшируемым в кэшируемом ресурсе. Лучше всего вызывать getPage с некэшируемым маркером “!”, а кеширование обеспечить с помощью внешних ресурсов. Это же правило применяется для представления плейсхолдера с помощью свойства pageNavVar (page.nav по умолчанию), эти выходные данные некэшируются в кэшируемом контенте страницы.

Необходимые свойства

Необходимо задать свойства элемента, а также все дополнительные свойства тех элементов, которые вызываются с помощью getPage.

Доступные свойства

Обязательные свойства

Имя

Описание

Значение по умолчанию

element

Имя modElement для обработки выходных данных.

Свойства страницы

Имя

Описание

Значение “ по умолчанию”

Доступно в версии

limit

Число результатов на странице, может быть отменено с помощью $_REQUEST. В версии 1.2.2+, $_GET данные обрабатываются до $_REQUEST

10

offset

Отступ, или стартовое положение записи в пределах массива данных для обработки результатов текущей страницы, следует учитывать результаты, ограничения и параметры VarKey.

0

page

Отображаемая страница, определяется значением _REQUEST , переменная задается VarKey.

Вычисляется

pageCount

Общее число страниц

Вычисляется

pageVarKey

Маркер свойств, отображает текущую страницу согласно $_REQUEST, и устанавливает значение страницы. В версии 1.2.2+, $_GET данные обрабатываются до $_REQUEST

page

totalVar

Маркер плэйсхолдера, содержащего общее число записей в рамках массива, разделяемого на страницы

total

total

Общее число записей, разбиваемых на страницы (см. totalVar )

Вычисляется

firstItem

1-based индекс первого отображаемого элемента на текущей странице.

Вычисляется

lastItem

1-based индекс последнего отображаемого элемента на текущей странице.

Вычисляется

pageOneLimit

Дополнительный лимит количества результатов для первой страницы, может отличаться от основного лимита.

1.2.2-pl

Навигационные свойства таблицы

Имя

Описание

Значение “по умолчанию”

pageLimit

Максимальное число ссылок страницы, отображаемое при обработке меню навигации страницы.

5

pageNavVar

Маркер плейсхолдера, устанавливающегося вместе с меню навигации.

page.nav

Свойства шаблона навигации по странице

Вы можете не изменять свойства данного tpl непосредственно из сниппета, т.к. последовательность, в которой производится парсинг тэгов, определена в Revolution.

Если вы хотите изменить данные значения по умолчанию, используйте следующие действия:

  • Перейдите на закладку Elements, откройте структуру сниппетов и найдите getPage, откройте его.
  • Вы увидите закладку "Element Properties". Откройте ее.
  • Создайте новый набор свойств, используя кнопку Add property set, в открывшемся окне отметьте чекбокс "Create new property set".
  • Назовите и сохраните набор свойств.
  • Теперь вы можете изменить значения свойств, которые не будут удалены при обновлении ПО.
  • Привяжите ваш собственный набор свойств к сниппету:
[ [!getPage@PropertySetName? &element=`getResources` &parents=`3` ...]] 4141

Имя

Описание

Значение по умолчанию

Доступен в версии.

pageNavOuterTpl

tpl с контентом для контроля слоя с элементами навигации.

[ [+first]][ [+prev]][ [+pages]][ [+next]][ [+last]] 4141

1.2.0-pl

pageNavTpl

tpl с контентом, представляющим собой одну страницу элементов навигации.

<li[[+classes]]><a[[+classes]][ [+title]] href="[ [+href]]">[ [+pageNo]]</a></li> 4141

pageActiveTpl

tpl с контентом,

представляющим собой текущую страницу элементов навигации.

<li[ [+activeClasses]]><a[ [+activeClasses:default=` class="active"`]][[+title]] href="[[+href]]"> [[+pageNo]]</a></li> 4141

pageFirstTpl

tpl с контентом,

представляющим собой первую страницу элементов навигации.

<li><a[ [+classes]][ [+title]] href="[[+href]]">First</a></li> 4141

pageLastTpl

tpl с контентом,

представляющим собой последнюю страницу элементов навигации.

<li><a[ [+classes]][ [+title]] href="[ [+href]]">Last</a></li> 4141

pagePrevTpl

tpl с контентом,

представляющим собой предыдущую страницу элементов навигации..

<li><a[ [+classes]][ [+title]] href="[ [+href]]"><<</a></li> 4141

pageNextTpl

tpl с контентом,

представляющим собой следующую страницу элементов навигации.

<li><a[ [+classes]][ [+title]] href="[ [+href]]">>></a></li> 4141

Свойства кэширования

Имя

Описание

Значение “по умолчанию”

cache

Отображается уникальный URI, если контент каждой страницы кэшируется (это не тот же параметр что и pageVarKey).

Значение настроек кэширования или false

cache_resource_key

Маркер, идентифицирующий xPDOCache запрос, используемый для кэширования контента страницы.

Значение настроек cache_resource_key setting, или default

cache_resource_handler

Маркер, идентифицирующий xPDOCache производный класс, используемый для запроса.

Значение настроек cache_resource_handler setting, или xPDOFileCache

cache_expires

Отображает время хранения каждого элемента в КЭШе ,в секундах.

0 означает хранение в КЭШе до удаления вручную, если нет дополнительных настроек, данные идентифицируются по предустанвленному значению cache_resource_key .

Значение настроек cache_expires setting, или 0

Дополнительные свойства

Имя

Описание

Значение “по умолчанию”

elementClass

Вторичный classname modElement, который нужно вызвать с помощью getPage и использовать как выходные данные, например modChunk или по умолчанию modSnippet

modSnippet

namespace

Исполняемый элемент namespace, присоединяемый к плейсхолдеру для выполнения специфических запросов сниппетом getPage.

toPlaceholder

Обозначает элемент, не посылаемый за пределы getPage, размещающий плейсхолдер, содержащий контент, необходимый getPage в данный момент. Это позволяет getPage кэшировать плейсхолдер с выходными данными словно это присланный элемент, и использовать его из кэша

Примеры

Страница со списком дочерних Resourceы текущих Resources, используя чанк вызываемый 'myRowTpl'.

[[!getPage? &element=`getResources` &parents=`[[*id]]` &tpl=`myRowTpl`]] <div> [[!+page.nav]] </div>

Страница с ресурсами до ресурса с ID '5', кроме ресурса 10, созданная с использованием вызова 'myRowTpl':

[[!getPage? &element=`getResources` &parents=`5` &resources=`-10` &tpl=`myRowTpl`]] <div> [[!+page.nav]] </div>

www.modx.cc

getResourceField MODX Revolution

getResourceField – простой сниппет, предназначенный для отображения поля, включающего переменные шаблона ресурсов для MODx Revolution..

История разработки

getResourceField впервые опубликован16 Сентября 2010 paulmerchant, соавтор Shaun McCormick

Загрузка

Сниппет можно загрузить с помощью Package Manager или непосредственно из Repository.

Использование

Минимальный синтаксис следующий:

[[getResourceField]]

Возвращает pagetitle текущего ресурса.

Параметры getResourceField

Имя

Описание

Значение “по умолчанию”

id

ID данных, полученных из поля

$modx->resource->get('id')

field

Возвращаемое имя поля или шаблона

?pagetitle

isTV

Если значение 1 или true поле считается переменной шаблона

false

processTV

Если значение 1 или true, переменная шаблона будет обработана согласно ее выходных данных.

false

default

Значение (строковое) возвращается, если поле не найдено или пустое

Примеры использования

Возврат pagetitle из источника с id 123:

[[getResourceField? &id=`123`]]

Будет сделан возврат значения TV из исходного ресурса с именем myTV, если нет данных, будет выдано сообщение 'Sorry, no data available'

[[getResourceField? &id=`[[*parent]]` &field=`myTV` &processTV=`1` &default=`Sorry, no data available`]]

Возврат поля introtext из исходника (UltimateParent snippet должен быть инсталлирован)

[[getResourceField? &id=`[[UltimateParent]]` &field=`introtext`]]

Ошибки

Ошибка заключается в том, что этот сниппет может зациклить редирект. В примере рассмотрен случай, в котором вы задаете шаблонную переменную на страничке, т.е. [[*featured_article]] и затем используете ее в getResourceField

Вызов сниппета:

[[getResourceField? &id=`[[*featured_article]]` &field=`content`]]

Если TV не определен, по умолчанию используется id текущей страницы. Если сниппет вызывается содержимым страницы, и вы запрашиваете содержимое как поле, то сниппет может войти в цикл, т.к. запросу не хватает времени для такого количества редиректов.

Итог: если сниппет вызывается изнутри тем же полем, которое вы вызываете, например контент, то нужно убедиться, что id параметр не ведет на текущую страницу.

www.modx.cc

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

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

realadmin.ru


Prostoy-Site | Все права защищены © 2018 | Карта сайта