меню
  • Что такое 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`]]

<div class="paging"> 
    <ul class="pageList"> 
        [[!+page.nav]] 
    </ul> 
</div> 

и чанк blogListPost:

 
<div class="blogPost"> 
    <div class="date">[[+publishedon:strtotime:date=`%b %d %Y`]]</div> 
    <h2><a href="[[~[[+id]]]]" title="[[+pagetitle]]">[[+pagetitle]]</a></h2> 

    <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> 
</div> 
<hr/> 

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

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

<?php
    $ts = !empty($input) ? strtotime($input) : time();
    return (string) $ts;

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

&where=`{"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.


Возможно, вам будет интересно

Документация по pdoResources

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

Вывод даты MODx Revo

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

MODX - Добавление reCaptcha в FormIt и Login

Статья, в которой рассмотрим, как на сайт, работающий под управлением MODX Revolution, интегрировать Google reCaptcha. Разбирать reCaptcha будем на базе компонента MODX ReCaptchaV2, который интегрируем в форму обратной связи (FormIt) и на страницу регистрации (Login).

Авторизация через соц.сети в MODX: hybridauth

Компонент MODX Revo Hybridauth позволяет регистрироваться пользователям на сайте через социальные сети и подгружать из них данных, а также объединять их в аккаунте.

Оформление заявки

Документы на создание сайта

Изучите наше коммерческое предложение, заполните БРИФ и отправьте его на почту maxidebox@list.ru. Изучив все пожелания из БРИФ-а, обратным ответом оповестим Вас по стоимости разработке, ответим на вопросы.

КП на создание сайта Коммерческое предложение на созданеи сайта

Мы берем на себя ответственность за все стадии работы и полностью избавляем клиентов от забот и необходимости вникать в тонкости.

Скачать БРИФ (акета) на создание сайта Скачать БРИФ (акета) на создание сайта

Зополните у БРИФ-а все необходимые поля. Сделайте краткое описание к каждому из пунктов анкеты, привидите примеры в соответсвующий пунктах - это позволит лучше понять Ваши ожидания и требования к сайту