getResourses
- Что такое getResources?
- Требования
- Установка
- Использование
- Имеющиеся плейсхолдеры
- Примеры
- Отображение TV параметров в getResources
- Использование getPage для номерации страниц
Что такое getResources?
getResources - это многоцелевой сниппет MODX Revolution, который может извлекать содержимое полей из других ресурсов и выводить его в любом удобном виде. Это не замена Ditto, а скорее альтернатива, сниппет, который может выполнять функции более специализированных компонент, таких как Ditto, Wayfinder, Breadcrumbs; фактически любых компонент, которые выполняют вывод данных из списка ресурсов.
Требования
- MODX Revolution 2.0.0 или выше
- PHP5 или выше
Установка getResources
Установка производится из панели управления MODX Revolution стандартным способом через Система->Управление пакетами->Загрузить дополнения.
Использование
Снипет getResourses может быть вызван с использованием тега:
[[!getResources]]
вызов без &tpl свойста выведет просто список всех ресурсов и их полей.
Доступные свойства:
Параметры шаблонизации
Название | Описание | Значение по умолчанию | Добавлено в версии |
---|---|---|---|
tpl | Название чанка, отвечающего за вывод ресурсов. Если не указано, выводятся список всех ресурсов текущего уровня. | ||
tplOdd | Название чанка выступающего в качестве шаблона с нечётным значением idx. (смотрите свойство idx). | ||
tplFirst | Назнание чанка, который будет шаблоном вывода первого ресурса | ||
tplLast | Назнание чанка, который будет шаблоном вывода последнего ресурса | ||
tpl_N | Назнание чанка, который будет шаблоном вывода n-ного ресурса, например, &tpl_4=`tpl4th` | ||
tpl_nN | Назнание чанка, который будет шаблоном вывода каждого n-ного ресурса, например, &tpl_n4=`tpl4th` будет применяться к любому элементу, у которого id делится на 4. | 1.4.1-pl | |
tplPath | Дополнительный каталог для поиска файлов на основе чанков при использовании @FILE | assets_path + "elements/chunks/" | |
tplWrapper | Название чанка, выступающего в виде обёртки шаблона для вывода [Примечание: не работает с toSeparatePlaceholders]. Плейсхолдер, где элементы вставлены - [[+output]]. | 1.6.0-pl | |
wrapIfEmpty | Если истина, выведёт обёртку, указанную в &tplWrapper даже если вывводимые данные отсутствуют. | false | 1.6.0-pl |
outputSeparator | Дополнительная строка для разделения каждого tpl . | "\n" | |
toPlaceholder | Если установлено, присвоит результат данному плейсхолдеру вместо его непосредственного вывода. | ||
toSeparatePlaceholders | Если установлено, будет назначать каждый результат отдельному плейсхолдеру, названному по имени этого параметра с суффиксом в виде последовательных чисел, начиная с 0. | 1.3.0 |
Префиксы шаблонов @FILE и @INLINE
@FILE - этот префикс позволяет вам указать файл вместо чанка в базе данных в качестве шаблона. Путь и имя файла, который вы указываете, будут заданы по умолчанию, если вы не задаете свойство tplPath, а поиск шаблона @FILE будет выполняться относительно вашей конфигурации assets_path + "elements/chunks/.
@INLINE - этот префикс позволяет вам указать разметку для использования с вашим шаблоном непосредственно в значении параметра. Рекомендуется использовать этот префикс шаблона только при указании свойств tpl* в наборе свойств [Property Set], в противном случае любые плейсхолдеры в строковой разметке могут быть вычислены перед передачей содержимого getResourses, поскольку кэшируемые вложенные теги в MODX Revolution вычисляются перед началом обработки содержащего их тега. @INLINE должен сопровождаться пробелом, например : "@INLINE <li>[[+pagetitle]]</li>".
Пример использования некэшируемой ссылки с префиксом шаблона @INLINE :
[[!getResources? &tpl=`@INLINE <a href="[[!~[[+id]]]]" title="[[+pagetitle]]">[[+pagetitle]] ([[+id]]) </a>`]]
Параметры выборки :
Название | Описание | Значение по умолчанию | Добавлено в версии |
---|---|---|---|
parents | Список ифентификаторов, разделённых запятыми, выступающих в качестве родителей. Используйте -1 для игнорирования родителей при указании ресурсов. Если этого параметра не указать, getResources принимает &parents как текущий ресурс и выбирает дочерние ресурсы от него (а также ресурсы, указанные в параметрах &resourses). | id текущего ресурса | |
resources | Разделённый запятыми список идентификаторов, включаемых в результат. Добавте перед идентификатором "- ", чтобы исключить его из результата. | ||
depth | Целочисленное значение, указывающее глубину поиска документов от каждого родителя. | 10 | |
tvFilters | Может быть использован для фильтрации ресурсов по определённым TV параметрам. Они вводятся как [(имя tv-параметра)(оператор)](значение). Вы можете использовать два разделителя для объединения условий фильтра. |
Вы можете использовать фильтры "ИЛИ" (OR), в виде двойной вертикальной черты ( ||). Фильтр "ИЛИ" (OR) извлекает ресурсы, которые имеют один из перечисленных tv-параметров.
mytv==одно значение||mytv==другое значениеe
Вы можете также использовать фильтр "И" (AND) указывая запятую (,). Этот фильтр проверяет соблюдение всех условий.
mytv==одно значение,othertv==другое значениеe
Для расширения возможностей фильтрации вы можете группировать эти значения. Важно знать, что вначале обрабатываются условия "ИЛИ" (||), а затем "И". Давайте рассмотрим это на примере:
mytv==foo||mytv==bar,bartv==3||bartv==1
Это будет фильтрация ресурсов, удовлетворяющим одному из следующих условий:
mytv равно foo, или:
mytv равно bar И bartv равно 3, или:
bartv равно 1
Выше приведены примеры поиска точных значений. Если хотите, вы так же можете использовать знак процента(%) в качестве маски. Например:
mytv==%a%
Соответствует любым ресурсам, имеющим "а" в значении mytv.
mytv==a%
Соответствует любым ресурсам, имеющим значение mytv, начинающееся с "а".
mytv==%a
Соответствует любым ресурсам, имеющим значение mytv, заканчивающееся на "а".
В этих случаях вы также можете использовать разделители "ИЛИ" ( ||) и "И" (,).
Важно знать, что эта функция ищет необработанное значение tv-параметра для определенного ресурса. Это означает, что данное значение точно установлено для ресурса и, что оно не будет обработано в соответствии с типом tv-параметра (или же является типом по умолчанию в релизах до 1.4.2-pl; в этом релизе добавляется поддержка фильтрации, включая значения по умолчанию). Поэтому, если у вас tv-параметр "авто-метка", это означает, что необработанное значение представляе собой список, ограниченный запятыми, и он не разделен на теги, как вы это видите в панели управления.
Начиная с версии 1.4.2-pl, возможно использование новых операторов фильтра. Имеется целый ряд новых операторов сравнения, которые можно использовать при создании условий фильтрования. Кроме того, при использовании многих из этих операторов перед сравнением tv-параметры приводятся к числовым величинам. Вот перечень допустимых операторов :
Оператор фильтра | SQL оператор | Числовое преобразование |
<=> (безопасное сравнение с NULL) | <=> | Да |
=== | = | Да |
!== | != | Да |
<> | <> | Да |
== | LIKE | Да |
!= | NOT LIKE | Да |
<< | < | Да |
<= | <= | Да |
=< | =< | Да |
>> | > | Да |
>= | >= | Да |
=> | => | Да |
sortby | Позволяет выполнять сортировку по любому полю ресурса (исключая tv-параметры). Некоторыми обычными полями, по которым возможна сортировка, являются : publishedon, munuindex, pagetitle и другие. Указывайте только имя поля, не используя синтаксис тега. Отметим, что при использовании для сортировки полей, подобных template, publishedby, они будут сортироваться по необработанным значениям, а не по их именам. |
Вы также можете использовать случайную сортировку, указав параметр RAND():
&sortby=`RAND()`
Начиная с версии 1.3.0 для сортировки по нескольким полям может использоваться массив JSON, например:
&sortby=`
{
"publishedon"
:
"ASC"
,
"createdon"
:
"DESC"
}
`
Если вы хотите выполнить сортировку в определенном особом порядке, вы можете сделать это, указав список идентификаторов (ID) ресурсов, подобно следующему :
&sortby=`
FIELD(modResource.id, 4,7,2,5,1 )
`
Это же возможно, если вы поместите идентификаторы в tv-параметр:
&sortby=`
FIELD(modResource.id,)
`
publishedon | Модифицировано в версии 1.3.0. |
sortbyAlias | Выстраивает псевдонимы для поля sortby. |
sortbyEscaped | Исключает имя поля, указанное в sortby. |
sortdir | Порядок, по которому производится сортировка. (По умолчанию: DESC) |
sortbyTV | tv-параметр, по которому производится сортировка. |
sortdirTV | Порядок, по которому производится сортировка при использовании sortbyTV. |
sortbyTVType | Указывает тип данных для sortbyTV. Возможными значениями являются : string, integer, decimal, datetime. (По умолчанию: string) |
limit | Ограничивает количество выдаваемых ресурсов. Используйте `0` для выдачи результатов без ограничений. (По умолчанию: 5) |
offset | Сдвиг выдаваемых по некоторому критерию ресурсов. (По умолчанию: 0) |
where | Выражение для критерия типа JSON для построения дополнительных условий. Смотрите примеры ниже, а также |
context | В каком контексте должен выполняться поиск. (По умолчанию в текущем) |
Прочие параметры:
Название | Описание | Значение по умолчанию | Добавлено в версии |
---|---|---|---|
showUnpublished | Если истина, будут отображаться ресурсы, снятые с публикации. | 0 | |
showDeleted | Если истина, будут отображаться ресурсы, помеченные для удаления. | 0 | |
showHidden | Если истина, будут отображаться ресурсы, независимо от того, отображаются ли они в меню. | 0 | |
hideContainers | Если установленно, не будут отображатся любые ресурсы, отмеченные как контейнер (is_folder). | 0 | |
includeContent | Указывает должно ли выдаваться в результатах содержимое каждого ресурса. | 0 | |
includeTVs | Указывает должны ли значения tv-параметров включаться в параметры, доступные каждому шаблону ресурса. | 0 | |
includeTVList | Дополнительный, разделяемый запятыми список имен tv-параметров для включения в явном виде, если includeTVs установлен в 1. | 1.4.0 | |
prepareTVs | Подготавливает значения tv-параметров, зависяшие от среды. | 1 | 1.5.0 |
prepareTVList | Органичивает tv-параметры теми, которые указаны по имени в разделенном запятыми списке. | 1.5.0 | |
processTVs | Указывает должны ли быть tv-параметры обработаны так, как они были бы представлены в ресурсе. tv-параметрыа должны быть включены для обработки (см. includeTVs/includeTVList). | 0 | |
processTVList | Дополнительный разделенный запятыми список имен tv- параметров, обрабатываемых явно. tv-параметры, указанные здесь, должны быть включены при помощи includeTVs/includeTVList | 1.4.0 | |
tvPrefix | Префикс для свойств tv-параметров. | tv. | |
idx | Вы можите определить начальный idx ресурсов, который представляет собой свойство, увеличивающееся при обработке каждого ресурса. | 1 | |
first | Определяет idx, представляющий собой первый ресурс. | 1 | |
last | Определяет idx, который представляет собой последний ресурс. По умолчанию это значение равноколичеству суммируемых ресурсов + first - 1 | ||
totalVar | Задает ключ плейсхолдера, устанавливаемого getResources для показа общего количества ресурсов, которые будут выбраны не учитывая значения limit. | total | |
debug | Если истина, отправит SQL запрос в лог-файл MODx | false |
Имеющиеся плейсхолдеры
Перечень плейсхолдеров, доступных для getResourses при форматировании чанков, зависит от ресурсов, с которыми вы работаете.
Смотрите раздел на странице "Обычно используемые теги шаблонов" ("Commonly Used Template Tags") - здесь перечислены параметры, доступные для всех ресурсов.
Если ваш ресурс имеет tv-параметры, они будут иметь соответствующие плейсхолдеры (помните, что плейсхолдеры будут использовать префикс, задаваемый параметром &tvPrefix).
Кроме того имеется следующий плейсхолдер :
[[+idx]] | Увеличивается с каждой итерацией, начиная с 1 (или со значения, заданного параметром &tvPrefix) |
Примеры
За более детальными примерами обращайтесь к подразделу документации .
Пример вывода списка дочерних ресурсов текущего ресурса с использованием чанка 'myRowTpl' :
[[!getResources? &parents=`71` &tpl=`myRowTpl`]]
Вывод списка всех дочерних ресурсов, начиная с 5, за исключением 10, используя чанк 'myRowTpl':
[[!getResources? &parents=`5` &resources=`-10` &tpl=`myRowTpl`]]
Вывод указанных ресурсов с использованием чанка 'myRowTpl'
[[!getResources? &parents=`-1` &resources=`10,11,12` &tpl=`myRowTpl`]]
Выводит 5 последних опубликованных ресурсов с помощью чанка 'blogPost'
[[!getResources? &parents=`5` &limit=`5` &tpl=`blogPost` &includeContent=`1`]]
Выводит список дочерних ресурсов текущего ресурса, где id шаблона ресурсов 1 или 2
[[!getResources? &parents=`71` &where=`{
"template:="
:1,
"OR:template:="
:2}` &tpl=`myRowTpl`]]
Выводит список дочерних элементов текущего ресурса с id шаблонов 1, 2 или 3 (вы пожете использовать один ключ несколько раз)
[[!getResources? &parents=`71` &where=`{
"template:IN"
:[1,2,3]}` &tpl=`myRowTpl`]]
Сообщание, выдаваемое при отсутствии результата:
[[!getResources:default=`No results found`? &parents=`71` &tpl=`myRowTpl`]]
Отображение TV параметров в getResources
Чтобы уменьшить время поиска, getResources не получает TV параментр по умолчанию. Если вы хотите отобразить TV, вы должны включать в вызов следующие параметры:
&includeTVs=`1` &processTVs=`1`
Вам необходим префикс перед каждым TV параметром.
&tvPrefix=``
В Tpl чанке, который вы использовать для отображения getResources используйте placeholder в месте, где должен отображаться TV параметр:
[[+tv.my_tv]]
Использование getPage для нумерации страниц
В сочетании с GetPage, GetResources позволяет делать мощное и гибкое разбиение на страницы вашего сайта.
Пример:
[[!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=
"[[~[[+id]]]]"
title=
""
>[[+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/>
Назад | Вперёд |