Modx getresources tvfilters: Сложная выборка по TV параметрам в getResources / Русскоязычное сообщество MODX

Создание сайта на MODX Revolution

  • Что такое 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>
<ul>
[[!+page. nav]]
</ul>
</div>

и чанк blogListPost:

<divclass="blogPost">

<divclass="date"></div>

<h3><a href="[[~[[+id]]]]"title="">[[+pagetitle]]</a></h3>

<pclass="author"><strong>Author:</strong> <spanclass="author">

[[+createdby:userinfo=`username`]]</span></p>

<pclass="summary">[[+introtext]]</p>

<pclass="readmore"><a href="[[~[[+id]]]]"><span>Read more</span></a></p>

<divclass="clear"></div>

</div>

<hr/>

Назад Вперёд

Сниппет getResources — статья от web студии разработки Witech

By Максим Леонов

/

13 Декабря, 2017

/

1775

В этой статье мы разберемся что такое getResources MODx Revolution, выясним, какие у него параметры, вывод и сортировка — с примерами и пояснениями. Приятного чтения.

  • Что такое getResourses
  • Как использовать
  • Параметры
  • Свойства

Что такое getResourses

Возвращает список используемых ресурсов (общее), играет роль фрагмента обобщения.

Проще говоря — позволяющий извлекать и выводить содержание полей других ресурсов в любом месте и виде.

Как использовать

Сниппет getResources может быть вызван через тег:

[[getResources]]

До версии 1.6.1-pl вызовы без указанного свойства &tpl будут выводить массив каждого ресурса в результирующем наборе (списке) и его полей. Начиная с версии 1.6.1-pl поведение изменилось, и вам придется использовать «&debug=`1`» для получения полного ответа. Пример:

[[getResources? &debug=`1`]]

[[getResources? &parents=`choose_an_id` &debug=`1`]]

Параметры

  • tpl — имя чанка, который выступает как шаблон ресурсов. В случае если шаблон не найден, данные будут выводиться в виде массива.
  • tplOdd — имя чанка, который выступает как шаблон с нечетным индексом.
  • tplFirst — имя чанка, который выступает как шаблон для первого ресурса.
  • tplLast — имя чанка, который выступает как шаблон для заключительного ресурса.
  • tpl_N -имя чанка, который выступает как шаблон для N-ного ресурса.
  • tpl_nN — имя чанка, который выступает как шаблон для каждого N-ного ресурса.
  • tplPath — каталог для просмотра чанков на базе файлов с использованием @FILE (по умолчанию assets_path + «elements/chunks/»).
  • tplWrapper — название чанка serving как обвёртка шаблона для вывода (не работает с toSeparatePlaceholders. Плейсхолдер, где элементы вставлены — [[+output]]).
  • wrapIfEmpty — если истинна, будет выводить обвёртку указанную в &tplWrapper даже если вывод пуст.
  • outputSeparator — доп строка для разделения каждого шаблона.
  • toPlaceholder — если установлен, присвоит результат в этот плейсхолдер вместо вывода напрямую.
  • toSeparatePlaceholders — если установлен, присвоит каждый результат разделяющему плейсхолдеру названного с помощью суффикса из значения данного параметра и номера (начиная с нуля).

Свойства

  • Parents — список ID родительских ресурсов, разделенные запятыми. Для исключения родительских ресурсов используется ID ресурса со знаком минус. (по умолчанию ID текущего ресурса).
  • Resources — список ID ресурсов, разделенные запятыми, которые должны включены в результат выборки. ID ресурса, который имеет префикс со знаком минус, исключаются из результата выборки.
  • Depth — целочисленное значение, которое указывает глубину поиска ресурсов от родительского элемента (по умолчанию 10).
  • tvFilters — может применяться для фильтрации ресурсов по конкретным значениям TV. (mytv==somevalue, othertv==othervalue).
  • Sortby — может применяться для сортировки ресурсов по конкретным полям. (&sortby=`{«publishedon»:»ASC», «createdon»:»DESC»}`, по умолчанию createdon).
  • sortbyAlias — сортировка по алиасу.
  • sortbyTV — сортировка по TV параметру.
  • limit — лимит выводимых ресурсов. Используйте 0 для снятия ограничения (по умолчанию 5).

Похожие публикации

Читайте нас на Яндекс Дзен

By Максим Леонов

/

08 Марта, 2018

/

1531

Необходимость создания сайта

By Максим Леонов

/

05 Сентября, 2017

/

2175

Создание системы блога в MODx

Фильтр

— ModX getResources & tvFilters не работает

спросил

Изменено 5 лет, 3 месяца назад

Просмотрено 893 раза

У меня есть выходные данные от getResourses, которые мне нужно отсортировать по значению переменной шаблона, но фильтр показывает ресурсы, которые имеют только одно значение.

Например, этот код показывает ресурсы, которые имеют значение только Manhattan TV. Тип ввода переменной шаблона — тег, тип вывода — по умолчанию. Я попытался изменить тип ввода на Auto-Tag.

 [[!getPage@Series?
&element=`получить ресурсы`
&parents=`[[*id]]`
&tpl=`Каталог новых серий`
&limit=`0`
&отладка=`1`
&includeTVs=`1`
&processTVs=`1`
&tvFilters=`door-color==Манхэттен`
&tvPrefix=``
]]
 

Скриншот вариантов входа телевизора

Вывод с намеренно нарушенным именем tpl

TV значение ресурса, которое не выводится, но должно, потому что имеет тег Manhattan результат такой же.

  • фильтр
  • modx
  • modx-revolution
  • шаблон-переменные
  • modx-getresources

Я нашел ответ.

Для фильтрации по ТВ с несколькими значениями необходимо добавить % % к значению.

Например, мой код должен выглядеть так:

 [[!getPage@Series?
&element=`получить ресурсы`
&parents=`[[*id]]`
&tpl=`Каталог новых серий`
&limit=`0`
&отладка=`1`
&includeTVs=`1`
&processTVs=`1`
&tvFilters=`цвет двери==%Манхэттен%`
&tvPrefix=``
]]
 

Вместо

 [[!getPage@Series?
&element=`получить ресурсы`
&parents=`[[*id]]`
&tpl=`Каталог новых серий`
&limit=`0`
&отладка=`1`
&includeTVs=`1`
&processTVs=`1`
&tvFilters=`door-color==Манхэттен`
&tvPrefix=``
]]
 

Надеюсь, это поможет вам не тратить время на попытки выяснить, что не так.

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя адрес электронной почты и пароль

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

modx — Как я могу показать переменные шаблона из статей с помощью getResources?

Задавать вопрос

спросил

Изменено 7 лет, 1 месяц назад

Просмотрено 522 раза

Я хочу использовать «getResources», чтобы показывать статьи из дополнительных «статей» на моей домашней странице.

Вот код моей домашней страницы:

 [[getResources? &parents=`52` &tpl=`sample.ArticlesLatestPostTpl` &showHidden=`1` &includeContent=`1` &includeTVs=`1` &processTVs=`1` ]]
 

и это мой образец .ArticlesLatestPostTpl :

 
  • [[*мое изображение]] [[+pagetitle]] [[+опубликовано:notempty=`
    - [[+опубликовано:strtotime:date=`%b %d, %Y`]]`]]
  • Моя переменная шаблона [[*myimage]]

    Но я не вижу переменную шаблона статьи. Вместо этого я вижу переменную шаблона домашней страницы.

    Кто-нибудь может мне помочь?

    • modx
    • modx-revolution
    • modx-getresources

    Я нашел ответ.

    Вместо [[*myimage]] мне нужно написать [[+myimage]] .

    И работает! 🙂

    0

    Это работает следующим образом:

    • [[*image]] отобразит данные внутри поля «изображение» текущего документ.
    Оставить комментарий

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *