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

Сниппет 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 Максим Леонов

/

16 Ноября, 2018

/

1109

Принципы Email-маркетинга вкратце

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

/

21 Сентября, 2018

/

12166

Немного о системе управления сайтом

Modx REVO: getProducts — более быстрая альтернатива getResources от shopkeeper для работы с каталогом

Спонсор блога Магазин детской одежды Dress

Параметры сниппета

parents — ID родительских ресурсов через запятую. По умолчанию текущий.

resources — Список ID ресурсов (товаров) через запятую.

depth — Глубина поиска родителей. По умолчанию 1.

tpl — Имя чанка шаблона для вывода ресурса.

outerTpl — Имя чанка шаблона обертки вывода. Доступен только плейсхолдер [[+inner]].

className — Имя класса (объекта) элементов таблицы БД. По умолчанию «modResource».

packageName — Имя пакета элементов таблицы БД. Например: shop — будет запрошен класс по адресу «/core/components/shop/model/shop/shopcontent.class.php». Рекоммендуется использовать пакет MIGXDB (http://modx.com/extras/package/migx).

where — JSON строка для условия WHERE в SQL запросе. Пример: &where=`{«template»:15}` (только поля ресурсов, без TV).

sortby — Поле для сортировки (только поля ресурсов, без TV). По умолчанию «menuindex». Для сортировки вразнобой использовать &sortby=`RAND()`.

sortdir — Направление сортировки. По умолчанию «ASC».

sortbyTV — Сортировка по TV. Указать имя TV.

sortdirTV — Направление сортировки по TV (ASC|DESC). По умолчанию «ASC»;

sortbyTVType — Тип значения TV (string|integer). По умолчанию «string»;

orderby — JSON строка сортировки. Пример: &orderby=`{«parent»:»ASC»,»pagetitle»:»ASC»}`

tvFilters — JSON строка фильтрации по ТВ. Пример: &tvFilters=`{«country»:»Китай»,»producer»:»Sony»}`. Другие примеры ниже.

includeTVs — Добавить плейсхолдеры значений TV для ресурсов (1|0). Префикс для TV: «tv.». Пример: [[+tv.image]]. По умолчанию = 0 (отключен).

includeTVList — Список имён TV, которые нужно добавить через запятую.

processTVs — Применять параметр «Параметры вывода» для TV.

processTVList — Список TV через запятую, для которых применять processTVs.

fromParentList — список полей через запятую, которые нужно добавить товарам от родителей. Например «pagetitle,image» — в чанке сниппета будут доступны плейсхолдеры [[+parent.

pagetitle]] и [[+parent.image]] (TV). По умолчанию выключено.

addSubItemCount — В чанке сниппета будет доступен плейсхолдер [[+subitemcount]] — число дочерних ресурсов.

subItemCountWhere — JSON строка для условия WHERE в SQL запросе для подсчета дочерних элементов.

noResults — Текст, который будет выводиться, если по запросу ничего не найдено.

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

totalVar — Имя плейсхолдера с общим количеством ресурсов. По умолчанию «total».

context — Контекст, из которого нужно вывести ресурсы. По умолчанию текущий.

activeParentSnippet — Сниппет для активного контейнера-ресурса — [[+activeParent_snippet]]. См. пример с меню ниже.

activeClass — Имя CSS-класса для активного ресурса. По умолчанию «active».

includeContent — Включать в выборку из БД значение поля «content» (1|0). По умолчанию выключено.

returnIDs — Возвращать только ID рессурсов (1|0). По умолчанию 0 (выключено).

useSmarty — Использовать в чанке шаблонизатор Smarty (1|0). По умолчанию 0 (выключено). Подробнее ниже.

debug — Режим отладки (1|0). В журнал ошибок будут писаться SQL запросы, полученные в сниппете. По умолчанию = 0 (отключен).

Параметры кэширования

gp_cache — Включить кэширование (1|0). По умолчанию выключено — 0.

cacheId — Идентификатор кэша. По умолчанию «gpCache».

Необязательные параметры кэширования

cache_key — Ключ кэша (название папки для файлов кэша). По умолчанию берется из настроек системы — cache_resource_key.

cache_handler — Обработчик кэширования. По умолчанию берется из настроек системы — cache_resource_handler (xPDOFileCache).

cache_expires — число секунд для кэширования. По умолчанию 0 (бесконечное).


Примеры фильтрации

Пример фильтрации по цене — больше и меньше: 

&tvFilters=`{"price:>=,<=:AND":[200,500]}`

Пример с поиском подстроки: 

&tvFilters=`{"param:LIKE":"%черный%"}`

Пример для поиска по стандартным полям: 

&where=`{"temlate:=:AND":"2","pagetitle:LIKE:AND":"%черный%"}`

Поиск по множественным значениям: 

&tvFilters=`{"param:LIKE:OR":["%черный%","%синий%","%зеленый%"]}`

Плейсхолдеры в чанке «tpl»

idx — Индекс строки от нуля.

first — (1|0) — Первая строка. Если первая строка, то выведется «1», если нет — «0».

last — (1|0) — Последняя строка.

odd — (1|0) — Четная строка.

activeClass — Класс активного ресурса.

classnames — Все CSS-классы одной строкой.

active — (1|0) — активный ресурс.

activeParent — ID активного родителя.

activeParent_snippet — Вывод сниппета из параметра &activeParentSnippet.

tv.любойTV — TV параметры.

parent.полеОтРодителя — поля от роделя (в т.ч. TV).

Пример вызова

[[!getProducts?
&parents=`5`
&includeTVs=`1`
&includeTVList=`price,image,producer,country`
&limit=`10`
&tpl=`product`
&where=`{"template":15}`
&tvFilters=`{"country":"Китай","producer":"Sony"}`
]]

Пример использования с getPage:

[[!getPage?
&cache=`1`
&elementClass=`modSnippet`
&element=`getProducts`
&parents=`5`
&includeTVs=`1`
&includeTVList=`price,image,producer,country`
&limit=`10`
&tpl=`product`
&where=`{"template":15}`
&tvFilters=`{"country":"Китай","producer":"Sony"}`
&pageFirstTpl=` <li><a [[+classes]] href="[[+href]]">Первая</a></li> `
&pageLastTpl=` <li><a [[+classes]] href="[[+href]]">Последняя</a></li> `
]]
<br />
<ul>
[[!+page.
nav]] </ul>

Пример вывода элементов из таблицы «modx_shop_content»
(см. http://modx-shopkeeper.ru/documentation/modx-revolution/tovaryi-iz-otdelnoj-tabliczyi.html):

[[!getPage?
&cache=`1`
&elementClass=`modSnippet`
&element=`getProducts`
&className=`shopContent`
&packageName=`shop`
&limit=`10`
&tpl=`product`
&where=`{"template":15}`
&pageFirstTpl=` <li><a [[+classes]] href="[[+href]]">Первая</a></li> `
&pageLastTpl=` <li><a [[+classes]] href="[[+href]]">Последняя</a></li> `
]]
<br />
<ul>
[[!+page.nav]]
</ul>

Пример вывода с кэшированием, кэшируется для всех страниц:

[[getProducts@top_products?
&gp_cache=`1`
&cacheId=`top_products`
]]

Пример вывода с кэшированием, кэшируется для всех страниц + учитывается валюта:

[[!getProducts@top_products?
&gp_cache=`1`
&cacheId=`top_products_[[!+shk_currency]]`
]]

Пример вывода многоуровневого меню (замена Wayfinder). Подуровни выводятся только для текущей категории:

[[getProducts?
&parents=`4`
&where=`{"hidemenu":0,"template:<>":5}`
&tpl=`menuRowTpl`
&addSubItemCount=`1`
&activeParentSnippet=`getProducts?parents=[[+id]]&tpl=menuRowTpl2`
]]

menuRowTpl:

<li>
    <a href="[[~[[+id]]]]">[[+pagetitle]] ([[+subitemcount]])</a>
    [[+active:is=`1`:then=`
    <ul>
        [[+activeParent_snippet]]
    </ul>
    `:else=``]]
</li>

menuRowTpl2:

<li>
    <a href="[[~[[+id]]]]">[[+pagetitle]]</a>
</li>
Фильтр

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

спросил

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

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

У меня есть выходные данные от 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 TV по дате не работает

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

спросил

Изменено 2 года, 1 месяц назад

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

Я пытаюсь отфильтровать элементы по дате их телевизора с помощью вызова getResources. Если событие (eventStart) больше или меньше сегодняшнего.

Для предстоящих событий это работает нормально:

 &tvFilters=`eventStart>>[[!getDate]]`
 

Однако для прошлых событий это не работает:

 &tvFilters=`eventStart<<[[!getDate]]`
 

По какой-то причине в моем редакторе кода (VS) стрелки ниже (<<) отображаются красным, и результаты не точны. Есть отсутствующие элементы и другие элементы без eventStart TV, которые появляются, когда они не должны.

Есть идеи?

ОБНОВЛЕНИЕ

Теперь отображаются отсутствующие прошлые события. Мне нужно было добавить свойство «& limit» и установить большое число, поскольку по умолчанию оно показывает только 5.

Теперь мне просто нужно найти способ исключить события, в которых eventStart TV не существует. Эти элементы не должны отображаться под прошлыми событиями, потому что у них нет конкретной даты.

  • modx
  • modx-революция
  1. Не беспокойтесь о красных стрелках, синтаксис правильный.

  2. Вы отладили, какой формат даты входит в eventStart TV? Может быть какая-то проблема с форматом, и как следствие неправильный выбор и сортировка... попробуйте уточнить, например, так:

    &tvFilters=`eventStart<<[[!getDate:date=`%Y-%m-%d`]]`

2

Вот решение. Мне нужно было установить свойство &limit. По умолчанию отображаются только 5 элементов, поэтому некоторые прошлые события отсутствовали.

Я также добавил второе условие &tvFilter eventStart!== для исключения ресурсов с пустым TV eventStart.

 &limit=`20`
&tvFilters=`eventStart<<[[!getDate]],eventStart!==`
 

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

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

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

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

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

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

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

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

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

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

Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.

Оставить комментарий

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

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