getResources - Вывод списков Ресурсов-getResources - Вывод списков Ресурсов

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

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

Сниппет 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,)`

По умолчанию: 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)

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

Плейсхолдер

Описание

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

Примеры

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

<p>[[!getResources? &parents=`65` &tpl=`myRowTpl`]]</p>

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

[[!getResources? &parents=`5` &resources=`-10` &tpl=`myRowTpl`]]

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

[[!getResources? &parents=`5` &resources=`-65` &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=`65` &where=`{"template:=":8}` &tpl=`myRowTpl`]]

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

[[!getResources? &parents=`65` &where=`{"template:=":1, "OR:template:=":2}` &tpl=`myRowTpl`]]

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

[[!getResources? &parents=`65` &where=`{"template:IN":[ 1,2,3 ]}` &tpl=`myRowTpl`]]

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

[[!getResources:default=`No results found`? &parents=`65` &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`]]

<div class="paging">

<ul class="pageList">

[[!+page.nav]]

</ul>

</div>

и чанк blogListPost:

<div class="blogPost">

    <div class="date"></div>

    <h2><a href="" title=""></a></h2>

 

    <p class="author"><strong>Author:</strong> <span class="author"></span></p>

    <p class="summary"></p>

    <p class="readmore"><a href=""><span>Read more</span></a></p>

 

    <div class="clear"></div>

</div>

<hr/>

Вывод последних за месяц ресурсов

Допустим у вас есть сниппет, который преобразовывает необходимую дату во время Unix, с которым сравнивается значение поля publishedon:

<?php

    $ts = !empty($input) ? strtotime($input) : time();

    return (string) $ts;

Далее просто добавьте параметр where, например если вы хотите узнать все опубликованные ресурсы за последний месяц:

&where=`{"publishedon:>":}`

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

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

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

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

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

[[!getResources? &parents=`5` &limit=`5` &tpl=`blogPost`]]

ИЛИ

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

ИЛИ

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

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

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

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

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

[[+content]]

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

24.07.2026

Главная »

Яндекс.Метрика