-
Что такое getResources?
-
Требования
-
История
-
Загрузка
-
Использование
-
Доступные параметры
Параметры шаблонизации
- Параметры выборки
-
-
Доступные плейсхолдеры
-
Примеры
-
Показ переменных шаблона (Template Variables) с getResources
-
Использование getPage для постраничной навигации
-
Поиск и устранение неисправностей
Что такое getResources?
Общая цель — вывод списков Ресурсов и обощающий сниппет.
Требования
- MODX Revolution 2.0.0-beta5 или новее
- PHP5 или новее
История
getResources был написан Джейсоном Ковардом (Jason Coward, aka opengeek) и выпущен 30 июня 2009.
Загрузка
Пакет можно загрузить из админки MODX Revolution через Управление пакетами или из репозитория дополнений MODX здесь
Это НЕ замена Ditto, а альтернативный компонент, который может выполнять некоторые задачи, которые делают более специализированные компоненты, например Ditto, Wayfinder, Breadcrumbs; в основном все, которые задают свойства для списка ресурсов (раньше Документы в MODX Evolution)
Использование
Сниппет getResources может быть вызван при помощи тега:
[[getResources]]
Вызовы без заданного параметра &tpl будет просто выводить массив в виде списка каждого конечного ресурса и его полей.
Доступные параметры
Параметры шаблонизации
#
Параметр
Описание
1
tpl
Имя чанка, выступающего в качестве шаблона для ресурса. Если не установлен, свойства выдаются в виде списка для каждого ресурса
2
tplOdd
Имя чанка, выступающего в качестве шаблона для ресурсов с нечетным индексом (см. параметр idx
3
tplFirst
Имя чанка, выступающего в качестве шаблона для первого ресурса
4
tplLast
Имя чанка, выступающего в качестве шаблона для последнего ресурса
5
tpl_N
Имя чанка, выступающего в качестве шаблона для N-ного ресурса, например &tpl_4=`tpl4th`
6
tpl_nN
Имя чанка, выступающего в качестве шаблона для каждого N-ного ресурса, например шаблон &tpl_n4=`tpl4th` будет применен к каждому элементу, порядковый номер которого кратен 4 Добавлено в версии: 1.4.1-pl
7
tplPath
Дополнительный каталог для поиска чанков на основе файлов при использовании биндинга @FILE По умолчанию: *assets_path* + "elements/chunks/"
8
outputSeparator
Дополнительные строки для разделения каждого ресурса после шаблонизации По умолчанию: "\n"
9
toPlaceholder
Если установлен, присвоит результат в указанный плейсхолдер вместо вывода напрямую
10
toSeparatePlaceholders
Если установлен, присвоит КАЖДОМУ результату отдельное имя плейсхолдера в виде суффикса из значения этого параметра и порядкового номера (начиная с 0) Добавлено в версии: 1.3.0
@FILE и @INLINE шаблоны
Вы можете указать любому шаблону в качестве префикса @FILE или @INLINE для использования чанков, основанных на файлах или просто разметки соответственно.
- @FILE — Этот префикс позволяет использовать файл вместо чанка в базе данных в качестве шаблона. Путь и имя файла будет задано по умолчанию, если не указать параметр tplPath и поиск для шаблона @FILE будет вестись относительно вашей конфигурации assets_path + “elements/chunks/”.
- @INLINE — Этот префикс позволяет задать разметку для использования в качестве шаблона прямо в значении параметра. Рекомендуется использовать это только когда определены tpl* параметры в Property Set, в противном случае любой плейсхолдер в вашей строчной разметке может быть обработана до того, как контент будет передан getResources, так как кешируемые вложенные теги в MODX Revolution обрабатываются до начала обработки самого тега, содержащего эти вложенные теги.
Параметры выборки
#
Параметр
Описание
1
parents
Список идентификаторов родительских ресурсов, разделенных запятыми. Используйте -1 для исключения родительских ресурсов. По умолчанию: current Resource id
2
resources
Список идентификаторов ресурсов, разделенных запятыми, для включения их в результат выборки. Префикс в виде минуса исключает ресурсы из результата выборки.
3
depth
Целое число, указывающее глубину поиска для ресурсов от каждого из родителей. По умолчанию: 10
3
tvFilters
Может использоваться для фильтрации ресурсов по определенным значениям переменных шаблона (TV). Они задаются как [(*tvname*)(*operator*)](*value*). Можно использовать два разделителя для объединения условий фильтра.
У вас могут быть фильтры с условием "ИЛИ" (OR) в виде двойной вертикальной черты. OR-фильтр получает ресурсы, которые имеют одно из перечисленных значений переменной шаблона (TV).
mytv==somevalue||mytv==othervalue
Вы также можете использовать фильтр "И" (AND) используя запятую. Этот фильтр проверит, чтобы все условия выполнялись.
mytv==somevalue,othertv==othervalue
Для тонкой фильтрации вы можете также группировать их. Важно знать, что сначала идут условия, разделенные по условиям ИЛИ (||), затем условия И (,). Давайте посмотрим такой пример:
mytv==foo||mytv==bar,bartv==3||bartv==1
Ресурсы будут отфильтрованы по одному из следующих условий (на самом деле в запросах к БД используется функция LIKE):
- mytv == foo, ИЛИ:
- mytv == bar И bartv == 3, ИЛИ:
- bartv == 1
Приведенные выше примеры ищут точные совпадения. Если вы хотите, вы также можете использовать знак процента (%) в качестве шаблона. Например:
mytv==%a%
Находит любые ресуры, которые имеют "a" в значении mytv.
mytv==a%
Находит любые ресурсы, значение mytv которых начинается с "a" и содержит все что угодно после "a".
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
Нет
<<
<
Да
<=
<=
Да
=<
=<
Да
>>
>
Да
>=
>=
Да
=>
=>
Да
3
sortby
Любое поле ресурса (за исключением переменных шаблона) для сортировки. Некоторые из общих полей для сортировки - это publishedon, menuindex, pagetitle и др., но смотрите документацию по ресурсам для всех полей. Укажите только имя поля, без использования синтаксиса тегов. Обратите внимание, что при использовании таких полей, как template, publishedby и подобных для сортировки, они будут сортироваться по сырым значениям, таким как ID шаблона или юзера, а не по их именам.
Вы также можете отсортировать в случайном порядке, используя RAND(), вот так:
&sortby=`RAND()`
Начиная с версии 1.3.0 это также может быть JSON массив для сортировки по нескольким полям, например:
&sortby=`{"publishedon":"ASC","createdon":"DESC"}`
Если вы хотите сортировать в определенном порядке, вы можете сделать это, указав список идентификаторов ресурсов следующим образом:
&sortby=`FIELD(modResource.id, 4,7,2,5,1 )`
Тоже самое возможно, если вы передадите список ID для сортировки в переменной шаблона, например:
&sortby=`FIELD(modResource.id,[[*templateVariable]])`
По умолчанию: publishedon Добавлено в версии: 1.3.0
4
sortbyAlias
Псевдоним запроса для поля из sortby
5
sortbyEscaped
Экранировать имя поля заданного в sortby
sortdir
Порядок сортировки По умолчанию: DESC
6
sortbyTV
Переменная шаблона (Template Variable) для сортировки Добавлено в версии: 1.2.0
7
sortdirTV
Порядок сортировки при использовании sortbyTV По умолчанию: DESC Добавлено в версии: 1.2.0
8
sortbyTVType
Указывает тип данных сортировки по TV. Возможные значения: string, integer, decimal, datetime По умолчанию: string Добавлено в версии: 1.3.0
9
limit
Ограничение количества возвращаемых ресурсов По умолчанию: 5
10
offset
Смещение ресурсов для пропуска, которые возвращаются в соответствии с критериями По умолчанию: 0
11
where
Выражение критериев в json-стиле для построения любых дополнительных условий. Смотрите ниже пример. Подробнее http: //rtfm.modx.com/display/xPDO20/xPDOQuery.where
12
context
В каком контексте следует искать. По умолчанию текущий контекст.
Другие параметры
#
Параметр
Описание
1
showUnpublished
Если true, то будут показаны также ресурсы, которые не опубликованы. По умолчанию: 0
2
showDeleted
Если true, то будут показаны ресурсы независимо от того, удалены они или нет. По умолчанию: 0
3
showHidden
Если true, покажет ресурсы независимо от того, показываются они в меню или нет. По умолчанию: 0
4
hideContainers
Если указан, то не будут показаны ресурсы, помеченные как контейнер (is_folder). По умолчанию: 0
5
includeContent Указывает, что содержание каждого ресурса должно возвращаться в результатах выборки. По умолчанию: 0
6
includeTVs
Указывает, что значения переменных шаблона должны быть включены в набор свойств, доступных для каждого шаблона ресурса По умолчанию: 0
7
includeTVList
Дополнительный список разделенных запятыми имет переменных шаблона для явного включения в результат, если includeTVs установлен в 1 Добавлено в версии: 1.4.0
8
processTVs
Указывает, что переменные шаблона должны быть отрисованы так как они были бы представлены в ресурсе. Переменные шаблона должны быть включены для обработки (см. includeTVs/includeTVList). По умолчанию: 0
9
processTVList
Дополнительный список имен переменных шаблона, разделенных запятыми, для явной обработки. Переменные шаблона, заданные здесь, должны быть включены через includeTVs/includeTVList Добавлено в версии: 1.4.0
10
tvPrefixПрефикс для свойств в виде переменных шаблона По умолчанию: tv.
11
idxВы можете задать начало idx ресурсов, что представляет собой свойство, котороые увеличивается с каждым отрисованным ресурсом По умолчанию: 1
12
firstЗадает idx, который представляет собой первый ресурс По умолчанию: 1
13
lastЗадает idx, который представляет последний ресурс. По умолчанию это количество ресурсов, которые будут складываться + первый - 1 (?)
14
totalVarЗадает ключ плейсхолдера, устанавливаемого getResources для показа общего количества ресурсов, которые будут выбраны не учитывая значения *limit*. По умолчанию: total
15
debugЕсли true, будет записывать sql-запросы в log MODX. По умолчанию: false
Доступные плейсхолдеры
Плейсхолдеры доступные в ваших чанках форматирования getResources в основном зависят от ресурсов, которые вы перечисляете.
См. Все теги на странице “Часто используемые теги шаблона” — это список свойств, доступных для всех ресурсов.
Если ваш ресурс имеет переменные шаблона, те в свою очередь будут иметь соответствующие плейсхолдеры (помните, что плейсхолдеры будут использовать префикс, заданный через параметр &tvPrefix)
Кроме того, существуют следующие плейсхолдеры:
ПлейсхолдерОписание
[[+idx]]
Увеличивается с каждой итерацией, начиная с 1 (или со значения, установленного параметром &idx)
Примеры
Вывод списка дочерних ресурсов текущего ресурса, используя чанк ‘myRowTpl’:
[[!getResources? &parents=[[*id]] &tpl=myRowTpl]]
Вывод всех дочерних ресурсов ресурса с ID ‘5’, за исключением ресурса 10, используя чанк ‘myRowTpl’:
[[!getResources? &parents=5 &resources=-10 &tpl=myRowTpl]]
Вывод всех дочерних ресурсов ресурса с ID ‘5’, за исключением текущего ресурса, используя чанк ‘myRowTpl’:
[[!getResources? &parents=5 &resources=-[[*id]] &tpl=myRowTpl]]
Вывод всех дочерних ресурсов ресурса с ID ‘5’ с сортировкой как в дереве ресурсов используя чанк ‘myRowTpl’:
[[!getResources? &parents=5 &tpl=myRowTpl &sortby={"menuindex":"ASC"}]]
Вывод только заданных ресурсов, используя чанк ‘myRowTpl’:
[[!getResources? &parents=-1 &resources=10,11,12 &tpl=myRowTpl]]
Вывод последних 5 опубликованных ресурсов, у которых родительский ресурс с ID ‘5’, используя шаблон ‘blogPost’:
[[!getResources? &parents=5 &limit=5 &tpl=blogPost &includeContent=1]]
Вывод списка дочерних ресурсов текущего ресурса, основанного на шаблоне ресурсов:
[[!getResources? &parents=[[*id]] &where={"template:=":8} &tpl=myRowTpl]]
Вывод списка дочерних ресурсов текущего ресурса, где ID шаблона ресурсов равен 1 или 2:
[[!getResources? &parents=[[*id]] &where={"template:=":1, "OR:template:=":2} &tpl=myRowTpl]]
Вывод списка дочерних ресурсов текущего ресурса, где ID шаблона ресурсов равен 1, 2 или 3 (вы не можете использовать тот же ключ больше одного раза):
[[!getResources? &parents=[[*id]] &where={"template:IN":[ 1,2,3 ]} &tpl=myRowTpl]]
Показ сообщения, когда ничего не найдено (эквивалент “empty” в Ditto):
[[!getResources:default=No results found? &parents=[[*id]] &tpl=myRowTpl]]
Показ переменных шаблона (Template Variables) с getResources
Чтобы уменьшить время обработки, getResources не получает значения TV по умолчанию. Если вы хотите показывать TV, вы должны включить следующие параметры:
&includeTVs=1 &processTVs=1
Вам также нужен либо префикс для всех TV с tv. или использовать этот параметр в теге вашего сниппета:
&tvPrefix=``
В чанке tpl, который вы используете для вывода getResources, используйте тег плейсхолдера как здесь (но с именем вашего TV):
[[+tv.my_tv]]
Использование getPage для постраничной навигации
В сочетании с getPage getResources позволяет делать мощные и гибкие нумерации ваших страниц.
Примеры
Берет первые 10 ресурсов, отсортированные по дате публикации (publishedon), которые внутри ресурса с ID 17, не больше чем на 2 уровня в глубину, с шаблоном ‘blogListPost’, включая переменные шаблона (TV) и содержимое (content):
[[!getPage?
&elementClass=modSnippet
&element=getResources
&parents=17
&depth=2
&limit=10
&pageVarKey=page
&includeTVs=1
&includeContent=1
&tpl=blogListPost]]
-
[[!+page.nav]]
и чанк blogListPost:
[[+pagetitle]]
<p class="author"><strong>Author:</strong> <span class="author">[[+createdby:userinfo=`username`]]</span></p>
<p class="summary">[[+introtext]]</p>
<p class="readmore"><a href="[[~[[+id]]]]"><span>Read more</span></a></p>
<div class="clear"></div>
Вывод последних за месяц ресурсов
Допустим у вас есть сниппет, который преобразовывает необходимую дату во время Unix, с которым сравнивается значение поля publishedon:
":[[time? &input=`-1 month`]]}` ## Поиск и устранение неисправностей ### Ничего не происходит Прежде чем биться головой о стену, убедитесь, что это дополнение установленно на вашем сайте. ### Выводится массив атрибутов Вы забыли указать параметр `&tpl`. Без &tpl сниппет будет пытаться определить ресурсы, но вы не сказали ему как их форматировать. Проверьте, указан ли параметр &tpl в вызове вашего сниппета, как тут: [[!getResources? &parents=`5` &limit=`5` &tpl=`blogPost`]] ИЛИ Вы допустили ошибку в имени чанка. Возможно у вас и указан &tpl, но чанк действительно существует? Если вы указали имя чанка, который не существует, getResources не будет знать как форматировать ваши ресурсы. ИЛИ Даже если вы правильно задали параметр &tpl, возможно, вы случайно забыли амперсанд к одному из ваших *других* параметров. Например limit=`5` приведет вызов сниппета к фейлу и атрибуты будут выведены без форматирования. Правильный формат должен быть &limit=`5`. ### Тот же самый ресурс выводится несколько раз *(1.2.2 и предыдущие релизы)* Если вы видите, что один и тот же ресурс показывается несколько раз, попробуйте убрать параметр &sortbyTV. ### Содержимого там нет Вы извлекаете правильные ресурсы и вы видите *какие-то*правильно отформатированные результаты, но ваш плейсхолдер [[+content]] ничего не выводит. Что происходит? Вам нужно указать параметр &includeContent=`1` чтобы получить содержимое. ## См. также Если вам нужно получить одно поле из другого ресурса, попробуйте использовать getResourceField. Перевод взят на сайте [http://modx.by](http://modx.by) Оригинал тут [http://rtfm.modx.com/display/ADDON/getResources](http://rtfm.modx.com/display/ADDON/getResources)