getResourses

Что такое 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/>
Назад Вперёд