Создание сайта на MODX Revolution
Что такое 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 | 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 :
[[!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:
<div
class
=
"blogPost"
>
<div
class
=
"date"
></div>
<h3><a href=
"[[~[[+id]]]]"
title=
""
>[[+pagetitle]]</a></h3>
<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/>
Вывод списка ресурсов на сайте с использованием pdoResources
Общие параметры для сниппетов, основанных на pdoTools/pdoFetch.
Параметры выборки ресурсов
Эти параметры определяют, какие объекты будут получены.
Название | По умолчанию | Описание |
---|---|---|
&class | modResource | Класс получаемого объекта |
&parents | Текущий ресурс | Список родителей, через запятую, для поиска результатов. Если поставить 0 — выборка не ограничивается. Если id родителя начинается с дефиса, он и его потомки исключаются из выборки. |
&depth | 10 | Глубина поиска дочерних ресурсов от родителя. |
&resources | Список ресурсов, через запятую, для вывода в результатах. Если id ресурса начинается с дефиса, этот ресурс исключается из выборки. | |
&templates | Список шаблонов, через запятую, для фильтрации результатов. Если id шаблона начинается с дефиса, ресурсы с ним исключается из выборки. | |
&context | Ограничение выборки по контексту ресурсов. | |
&where | Массив дополнительных параметров выборки, закодированный в JSON. | |
&showHidden | 0 | Показывать ресурсы, скрытые в меню. |
&showUnpublished | 0 | Показывать неопубликованные ресурсы. |
&showDeleted | 0 | Показывать удалённые ресурсы. |
&hideContainers | 0 | Отключает вывод контейнеров, то есть, ресурсов с «isfolder = 1». |
&hideUnsearchable | Отключает вывод спрятанных от поиска ресурсов. | |
&select | Список полей для выборки, через запятую. Можно указывать JSON строку с массивом, например {«modResource»:»id,pagetitle,content»}. | |
&leftJoin | Аналог SQL оператора left join | |
&rightJoin | Аналог SQL оператора right join | |
&innerJoin | Аналог SQL оператора inner join | |
&joinSequence | innerJoin,leftJoin,rightJoin | Порядок подключения таблиц, через зяпятую. |
&sortby | pagetitle | Любое поле ресурса для сортировки, включая ТВ параметр, если он указан в параметре &includeTVs. Можно указывать JSON строку с массивом нескольких полей. Для случайно сортировки укажите «RAND()» |
&sortdir | ASC | Направление сортировки: по убыванию или возрастанию. |
&groupby | Указывает поле, по которому группируются результаты | |
&having | Используется, чтобы ограничить выборку сгруппированных строк с помощью условия, относящегося ко всей группе, заданной в &groupby | |
&limit | 0 | Ограничение количества результатов выборки. Можно использовать «0». |
&offset | 0 | Пропуск результатов от начала. |
&first | 1 | Номер первой итерации вывода результатов. |
&last | Автоматически, по формуле (total + first — 1) | Номер последней итерации вывода результатов. |
&loadModels | Список компонентов, через запятую, чьи модели нужно загрузить для построения запроса. Например: &loadModels=`ms2gallery,msearch3`. | |
&tvFilters | Список фильтров по ТВ, с разделителями AND и OR. Разделитель, указанный в параметре &tvFiltersOrDelimiter представляет логическое условие OR и по нему условия группируются в первую очередь. Внутри каждой группы вы можете задать список значений, разделив их &tvFiltersAndDelimiter. Поиск значений может проводиться в каком-то конкретном ТВ, если он указан «myTV==value», или в любом «value». Пример вызова: &tvFilters=`filter2==one,filter1==bar%||filter1==foo`. Обратите внимание: фильтрация использует оператор LIKE и знак «%» является метасимволом. И еще: Поиск идёт по значениям, которые физически находятся в БД, то есть, сюда не подставляются значения по умолчанию из настроек ТВ. | |
&tvFiltersAndDelimiter | «,» | Разделитель для условий AND в параметре &tvFilters. |
&tvFiltersOrDelimiter | «||» | Разделитель для условий OR в параметре &tvFilters. |
&sortbyTV | Дополнительное поле, по которому нужно сортировать результаты. Может быть указано напрямую в параметре &sortby | |
&sortdirTV | Направление сортировки по дополнительному полю, указанному в &sortbyTV. Может быть указано напрямую в параметре &sortby | |
&sortbyTVType | Тип сортировки по ТВ параметру. Возможные варианты: string, integer, decimal и datetime. Если пусто, то ТВ будет отсортирован в зависимости от его типа: как текст, число или дата. | |
&checkPermissions | Укажите, какие разрешения нужно проверять у пользователя при выводе объектов. | |
&disableConditions | Отключает специфичные для класса modResource параметры выборки. | |
&fenomModifiers | список сниппетов-модификаторов через запятую, для подключения в Fenom. Подробности в соответствующем разделе. |
Параметры шаблонов
Эти параметры устанавливают чанки, которые содержат шаблоны для генерации вывода, то есть отвечают за внешний вид.
Название | Описание |
---|---|
&tpl | Имя чанка для оформления ресурса. Если не указан, то содержимое полей ресурса будет распечатано на экран. |
&tplFirst | Имя чанка для первого ресурса в результатах. |
&tplLast | Имя чанка для последнего ресурса в результатах. |
&tplOdd | Имя чанка для каждого чётного ресурса (хоть «odd» значит «нечётный», работает для чётных ресурсов). |
&tpl_N | Имя чанка для N-го ресурса, например, &tpl_4=`tpl4th` установит шаблон для 4-го ресурса. |
&tpl_nN | Имя чанка для каждого N-го ресурса, например, &tpl_n4=`tplEvery4th` будет применено к каждому 4-му ресурсу. |
&tplCondition | Поле ресурса, из которого будет получено значение для выбора чанка по условию в &conditionalTpls. |
&tplOperator | Необязательный оператор для проведения сравнения поля ресурса в &tplCondition с массивом значений и чанков в &conditionalTpls. |
&conditionalTpls | JSON строка с массивом, у которого в ключах указано то, с чем будет сравниваться &tplCondition, а в значениях — чанки, которые будут использованы для вывода, если сравнение будет успешно. Оператор сравнения указывается в &tplOperator. Для операторов типа isempty можно использовать массив без ключей. |
&outputSeparator | Необязательная строка для разделения результатов работы. |
Параметры результатов
Эти параметры дополнительно определяют, какие данные и каким способом будут выводиться.
Название | По умолчанию | Описание |
---|---|---|
&return | chunks | Определяет способ вывода результатов. См. ниже. |
&fastMode | 0 | Быстрый режим обработки чанков. Все необработанные теги (условия, сниппеты и т. п.) будут вырезаны. |
&nestedChunkPrefix | pdotools_ | Префикс для «быстрых плейсхолдеров», включаемых параметром &fastMode |
&idx | Вы можете указать стартовый номер итерации вывода результатов. | |
&totalVar | total | Имя плейсхолдера для сохранения общего количества результатов. |
&includeContent | 0 | Включаем поле «content» в выборку. |
&includeTVs | Список ТВ параметров для выборки, через запятую. Например: «action,time» дадут плейсхолдеры [[+action]] и [[+time]] . | |
&includeTVList | Псевдоним &includeTVs | |
&prepareTVs | 1 | Список ТВ параметров, с файлами из источников медиа, для которых нужно сгенерировать полные пути. Если установить в «1», будут подготовлены все ТВ, указанные в &includeTVs. |
&processTVs | Список ТВ параметров, которые нужно обработать и вывести согласно их настроек в менеджере системы. Если установить в «1», будут обработаны все ТВ, указанные в &includeTVs. Замедляет работу. | |
&tvPrefix | tv. у pdoResources и пусто у других сниппетов | Префикс для ТВ параметров. |
&prepareSnippet | 1 | Указывает сниппет, который принимает данные перед выводом в чанк и может их менять или добавлять |
&decodeJSON | Разбирает поля типа JSON вместо вывода в виде строки | |
&scheme | -1 | Схема формирования url, передаётся в modX::makeUrl(), поэтому возможные варианты нужно смотреть здесь. Особый тип uri подставляет значение uri ресурса, без запуска функции. |
&useWeblinkUrl | Генерировать ссылку с учетом класса ресурса. | |
&toSeparatePlaceholders | Если вы укажете слово в этом параметре, то ВСЕ результаты будут выставлены в разные плейсхолдеры, начинающиеся с этого слова и заканчивающиеся порядковым номером строки, от нуля. Например, указав в параметре «myPl», вы получите плейсхолдеры [[+myPl0]] , [[+myPl1]] и т.д. | |
&additionalPlaceholders | Устанавливает дополнительные плейсхолдеры | |
&cache_key | Значение системной настройки cache_resource_key для ресурсов (по умолчанию resource) или default | Ключ кеширования |
&cache_handler | Значение системной настройки cache_resource_handler или xPDOFileCache | Обработчик кеша |
&cacheTime | Значение системной настройки cache_resource_expires или 0 (вечный) | Время жизни кеша |
Способы вызова чанков
Все чанки могут иметь один из следующих префиксов:
@INLINE или @CODE. В качестве шаблона будет использован код после этого префикса.
[[!pdoResources?
&parents=`0`
&tpl=`@INLINE <li>{{+pagetitle}}</li>`
]]
В INLINE чанках нельзя указывать сниппеты, другие чанки или фильтры вывода через обычные теги, потому что так парсер MODX обработает их в первую очередь, и сниппет получит совсем не то, что вы хотели.
Поэтому для INLINE чанков предусмотрена замена [[+]] на {{+}} — такие теги MODX пропускает, а pdoTools при работае конвертирует их как нужно. Конечно, вы всё равно можете использовать теги MODX, если вам нужно, чтобы в чанк попала уже обработанная информация, например:
[[!pdoResources?
&parents=`0`
&tplFirst=`@INLINE Текущая страница: [[*pagetitle]]`
&tpl=`@INLINE <p>{{+id}} - {{+pagetitle}}<p>`
]]
@FILE. Вместо чанка из базы данных используется содержимое файла. Путь до файла указывается в систеной настройке pdotools_elements_path. Имя файла должно быть с расширением .tpl или .html.
[[!pdoResources?
&tpl=`@FILE fileBasedRow.tpl`
]]
@TEMPLATE. Указывается идентификатор или имя шаблона. Если пусто — для каждого ресурса будет использован его собственный шаблон.
[[!pdoResources?
&tpl=`@TEMPLATE 10`
]]
@CHUNK. Аналогично простому указанию имени чанка, оставлено для совместимости со сторонними сниппетами.
[[!pdoResources?
&tpl=`@CHUNK tpl.Resource.row`
]]
[[!pdoResources?
&tpl=`tpl.Resource.row`
]]
Подробнее про возможности pdoParser можно прочитать в соответствующем разделе.
Возвращаемые значения
pdoTools умеет возвращать данные в разном виде, в зависимости от параметр &return
. В основном это используют сами сниппеты для внутренних нужд, но вы можете указывать &return
в pdoResources:
[[!pdoResources?
&parents=`0`
&return=`json`
]]
- chunks — оформленные чанки, по умолчанию.
- sql — подготовленный сырой SQL, полезно для отладки. Сам запрос не выполняется, только выводится на экран.
- data — готовый массив данных. Из-за особенностей работы сниппетов MODX этот вариант имеет смысл использовать только при вызове pdoFetch::run() напрямую из своего сниппета, в противном случае вы получите только строку «Array».
- ids — возвращает только идентификаторы документов, через запятую. Удобно для подстановки в качестве параметра другим сниппетам. Параметр
&returnIds
использует именно этот тип. - json — возврат массива данных JSON строкой.
- serialize — возврат массива данных сериализованной строкой. Иногда, по непонятным причинам, может вызвать нехватку памяти. Лучше использовать
json
.
[pdoTools] Версия 1.4.0, сниппет pdoResources / Расширения MODX / Блоги / bezumkin.ru
Все пользователи MODX Revolution знают основной инструмент для работы с документами сайта — getResources. Возможности его почти безграничны, параметров и настроек хватает для любых ситуаций.Однако, есть один неприятный момент: иногда скорость работы этого сниппета бывает недостаточной. Его нельзя назвать прям тормозом, но хотелось бы побыстрее.
Учитывая, что мы уже довольно давно используем pdoTools для разработки быстрых сниппетов в своих компонентах, написание аналога getResources было только вопросом времени.
И вот, наконец-то, новый сниппет pdoResources включен в пакет по умолчанию и является самым главным изменением в новой версии pdoTools. Поэтому, с него и начнем.
Сниппет pdoResources
Это сниппет, написанный на pdoTools и входящий в состав пакета. Он предназначен для получения и вывода документов сайта и, насколько это возможно, повторяет функционал getResources.Основное отличие — работа с ТВ параметрами:
- Нет &processTVs=«
- Параметр &includeTVs=« принимает имена ТВ параметров. То есть, нужно указывать, какие ТВ выбирать. Включить сразу все подряд ТВ нельзя.
- Все возможные дополнительные условия указываются в &where=«. Нет отдельной фильтрации по ТВ, но это можно указать вручную.
- Нет условий при работе с чанками (conditional chunks). Если будет нужно — добавим.
Ну а теперь — про скорость!
Выборка из БД
Простая выборка из БД, без оформления, без ТВ параметров, чистый тест скорости получения данных.Вызовы сниппетов:
[[!getResources? &parents=`2` &limit=`n` ]] [[!pdoResources? &parents=`2` &limit=`n` ]]Результаты:
Limit | getResources | pdoResources |
---|---|---|
10 | 0.1592 s | 0.1304 s |
50 | 0.3502 s | 0. 1495 s |
100 | 0.5500 s | 0.1762 s |
500 | 2.1891 s | 0.3045 s |
Выборка и оформление
Та же выборка, но с указанием чанка, в котором всего два плейсхолдера:<p>[[+idx]] - [[+pagetitle]]</p>Вызовы сниппетов:
[[!getResources? &parents=`2` &tpl=`tpl.Test.row` &limit=`n` ]] [[!pdoResources? &parents=`2` &tpl=`tpl.Test.row` &limit=`n` ]]Результаты:
Limit | getResources | pdoResources |
---|---|---|
10 | 0.1721 s | 0.1384 s |
50 | 0.3994 s | 0.1687 s |
100 | 0.6915 s | 0.2047 s |
500 | 2.7538 s | 0. 4851 s |
Выборка и оформление + 2 ТВ параметра
Добавляем 2 ТВ параметра в наш чанк и выборку:<p>[[+idx]] - [[+pagetitle]]. [[+tv.meta_description]] [[+tv.meta_keywords]]</p>Вызовы сниппетов:
[[!getResources? &parents=`2` &tpl=`tpl.Test.row` &includeTVs=`1` &includeTVList=`meta_description,meta_keywords` &limit=`n` ]] [[!pdoResources? &parents=`2` &tpl=`tpl.Test.row` &includeTVs=`meta_description,meta_keywords` &limit=`n` ]]Результаты:
Limit | getResources | pdoResources |
---|---|---|
10 | 0.2029 s | 0.1383 s |
50 | 0.5014 s | 0.1747 s |
100 | 0.8860 s | 0.2230 s |
500 | 4.0989 s | 0.5248 s |
Выводы
Дальнейшие тесты проводить не вижу смысла, ибо в зависимости от чанков и условий выборки разрыв будет только увеличиваться.Это достигается благодаря двум основным составляющим:
- Выборка всего нужно за один запрос, через PDO.
- Предварительная обработка чанков, когда значения из ресурса заменяются в чанке без парсера MODX.
Обращаю ваше внимание, что это работа без fastMode и быстрых плейсхолдеров.
Остальные изменения pdoTools
Внимание, это изменения, которые влияют на работу всех сниппетов pdoTools. То есть, новые свойства можно использовать и у miniShop2 и у Tickets!Параметр sort теперь принимает массивы в виде JSON строк, например:
[[!msProducts? &sortby=`{ "publishedon":"desc" ,"pagetitle":"asc" }` ]]
Добавлена автоматическая замена имён ТВ в &where. Тут нужно немного пояснить: из-за того, что ТВ присоединяются к запросу в БД, используются псевдонимы, и при указании
&includeTVs=`test`в запросе мы получаем
`TVtest`.`value` as `test`То есть, для работы с присоединённым ТВ нужно было указывать вот такое условие:
&includeTVs=`test` &where=`{ "TVtest.value:!=":"0" }`С версии 1.4.0 вы можете указать просто:
&includeTVs=`test` &where=`{ "test:!=":"0" }`и замена в запросе будет произведена автоматически.
Новый метод pdoTools::defineChunk(), который позволяет назначить кучу чанков для вывода результатов, согласно логики getResources.
Этот метод выдает имя чанка, используя параметры:
&tplFirst — чанк для первой строки результатов
&tplLast — чанк для последней строки результатов
&tplOdd — чанк для каждой второй строки
&tpl_N — чанк для n строки, например для 4й строки будет &tpl_4=«
&tpl_nN — чанк для каждой n строки, например для каждой третьей будет &tpl_n3=«
Эта возможность не включится автоматически — для нее сниппеты нужно апгредить. Конечно, новый pdoResources это уже умеет.
В лог менеджеру теперь выводится потребление памяти. Не знаю, пригодится это кому то, или нет — но мне нравится. Для просмотра лога нужно быть авторизованным в админке у вызвать сниппет с параметром
&showLog=`1`
Заключение
С версии 1.4.0, pdoTools стал не только библиотекой для написания быстрых сниппетов, но и гораздо более быстрой заменой getResources.Текущая версия — бета. Возможны ошибки и недоработки, но уверен, вместе мы их поправим. В дальнейшем я планирую добавить сниппеты pdoMenu и pdoSitemap, которые, надеюсь, будут повторять функционал Wayfinder и GoogleSiteMap, только более быстро.
По GoogleSiteMap, кстати, уже есть наработки.
И всё таки, чего же нет в pdoResources?
Список вещей, которые есть в getResources, но пока не реализованы в pdoResources:- @FILE и @INLINE чанки — не уверен, что кто-то этим пользуется
- &toSeparatePlaceholders — тоже самое. (Появилось в 1.4.1)
- &tvFilters — не реализовано, но работает при указании ТВ в &where, например
[[!pdoResources? &includeTVs=`test` &where=`{"test:!=":""}`]]
- &sortbyTV, &sortdirTV и &sortbyTVType — не реализовано, но работает при указании сортировки в обычном &sortby, например:
[[!pdoResources? &includeTVs=`test` &sortby=`{"test":"desc"}`]]
- &prepareTVs, &prepareTVList, &processTVs, &processTVList — этого нет, и скорее всего, не будет.
- &debug — есть гораздо более мощный и удобный &showLog=`1`
- &sortbyAlias, &sortbyEscaped — не знаю, зачем они.
- &tplCondition, &conditionalTpls и $tplOperator — чанки с условием, в документации не описаны, но скорее всего — сделаю. (Появилось в 1.4.1)
Добавление новых комментариев отключено.
Все о компьютерах — Документация сниппета getResources для MODx Revolution
getResources – это сниппет MODX Revolution, который извлекает содержимое полей из других ресурсов и выводит его в любом удобном для вас виде.
Использование
[[getResources]]
Если не задать параметр &tpl
будет выводить массив данных полей вложенных ресурсов, но для этого используйте &debug=`1`
Параметры
Параметры шаблона
Название | Описание | По умолчанию |
---|---|---|
tpl |
Имя чанка, который выступает как шаблон ресурсов. В случае если шаблон не найден, данные будут выводиться в виде массива | |
tplOdd |
Имя чанка, который выступает как шаблон с нечетным индексом (смотрите параметр idx ) |
|
tplFirst |
Имя чанка, который выступает как шаблон для первого ресурса | |
tplLast |
Имя чанка, который выступает как шаблон для заключительного ресурса | |
tpl_N |
Имя чанка, который выступает как шаблон для N-ного ресурса, к примеру &tpl_4=`tpl4th` |
|
tpl_nN |
Имя чанка, который выступает как шаблон для каждого N-ного ресурса, к примеру шаблон&tpl_n4=`tpl4th` будет приложен к каждому 4-му элементу |
|
tplPath |
Каталог для просмотра чанков на базе файлов с использованием @FILE |
assets_path + "elements/chunks/" |
tplWrapper |
Название чанка serving как обвёртка шаблона для вывода Примечание: Не работает с toSeparatePlaceholders . Плейсхолдер, где элементы вставленны — [[+output]] . |
|
wrapIfEmpty |
Если истинна, будет выводить обвёртку указанную в &tplWrapper даже если вывод пуст. |
|
outputSeparator |
Доп строка для разделения каждого шаблона. | "\n" |
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 |
Примеры
Выводит список дочерних ресурсов текущей страницы с использованием шаблона «MyTpl»
[[!getResources? &parents=`[[*id]]` &tpl=`myTpl`]]
Выводит список дочерних ресурсов 4ой страницы с использованием шаблона «MyTpl», исключая дочерний ресурс с индификатором 7
[[!getResources? &parents=`4` &resources=`-7` &tpl=`myTpl`]]
Выводит только ресурсы с индификаторами 10,11 и 12 с использованием шаблона «MyTpl»
[[!getResources? &parents=`-1` &resources=`10,11,12` &tpl=`myTpl`]]
Выводит список из 5и дочерних ресурсов 5ой страницы с использованием шаблона «MyTpl», включая содержимое дочерних ресурсов
[[!getResources? &parents=`5` &limit=`5` &tpl=`MyTpl` &includeContent=`1`]]
Оригинальная информация по сниппету на английском:
Сниппет getResources — статья от web студии разработки Witech
By Максим Леонов
/13 Декабря, 2017
/ 1298В этой статье мы разберемся что такое getResources MODx Revolution, выясним, какие у него параметры, вывод и сортировка — с примерами и пояснениями. Приятного чтения.
Что такое 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).
pdoTools / Утилиты / Дополнения MODX / modstore.pro
Внимание, этот компонент требует версию PHP 5.6 или выше! Если ваш сайт использует PHP ниже требуемого, установка этого дополнения может его сломать.
Внимание, этот компонент требует версию MODX не ниже 2. 3 !
pdoTools — это набор удобных сниппетов для повседневной работы + небольшая библиотека, которая делает их очень быстрыми.Благодаря использованию общей библиотеки, все сниппеты pdoTools обладают единым минимальным функционалом:
- Все запросы в БД работают через PDO. Объекты xPDO не создаются, только если они действительно не нужны.
- Предварительная обработка простых плейсхолдеров в чанках. Парсер MODX разбирается только со сложными вызовами.
- Правильная сортировка, подготовка, обработка и вывод ТВ параметров.
- Код чанков можно указывать прямо при вызове сниппета, загружать обычным образом или из статичных файлов.
- «Быстрые плейсхолдеры» в чанках, которые заменяют фильтры типа «isempty» и оборачивают значения в теги только если те не пусты.
- Ведение подробного журнала работы сниппета с отметками времени, для отладки.
Все запросы строятся на xPDO, выборка производится через PDO для экономии ресурсов и скорости.
В состав входят:
- pdoResources — Очень быстрая замена для getResources, совместимая по параметрам.
- pdoMenu — Замена для Wayfinder, строит меню.
- pdoUsers — Выборка и вывод пользователей сайта, с фильтрацией по ролям и группам.
- pdoCrumbs — Хлебные крошки, замена BreadCrumb.
- pdoSitemap — Быстрая генерация карты сайта, замена GoogleSiteMap.
- pdoNeighbors — Вывод ссылок на соседние документы.
- pdoField — Вывод любого поля документа, замена getResourceField и UltimateParent.
- pdoPage — Постраничный вывод результатов, замена getPage.
Основные возможности
— Любые выборки, из любых таблиц с любыми условиями и джоинами.
— Учет времени на каждую операцию, подробный лог для выявления узких мест.
— Полная совместимость с getPage для постраничного вывода результатов.
— Самый быстрый процессинг чанков, быстрее только вообще без них.
— Встроенный шаблонизатор Fenom в версии 2.0
Modx REVO: getProducts — более быстрая альтернатива getResources от shopkeeper для работы с каталогом
Параметры сниппета
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>
getResources — getResources | Документация MODX
Что такое getResources? ¶
Фрагмент списка ресурсов и резюмирования общего назначения.
Требования¶
- MODX Revolution 2.0.0-beta5 или новее
- PHP5 или выше
История
getResources был впервые написан Джейсоном Кауардом (opengeek) и выпущен 30 июня 2009 года.
Загрузить¶
Его можно загрузить из менеджера MODX Revolution через Управление пакетами или из репозитория MODX Extras здесь: https: // modx.com / extras / package / getresources
Это НЕ замена Ditto, а скорее альтернативный компонент, который может выполнять некоторые из вещей, которые делают более специализированные компоненты, например, Ditto, Wayfinder, Breadcrumbs; в основном все, что выводит свойства для списка ресурсов (ранее документы в MODX Evolution).
Документацию и руководства по русскому языку можно найти здесь: http://modx.by/docs/modx-add-ons/getresources/
Использование¶
Фрагмент getResources можно вызвать с помощью тега:
[[getResources]]
До версии 1.6.1-pl, вызовы без указанного свойства & tpl будут выводить массив каждого ресурса в наборе результатов и его полей. Начиная с версии 1.6.1-pl это поведение изменилось, и вам придется использовать «& debug = 1
», чтобы получить полный результат:
[[getResources? & debug = `1`]]
[[getResources? & parent = `choose_an_id` & debug =` 1`]]
Доступные объекты
Свойства шаблона¶
Имя | Описание | Значение по умолчанию | Добавлено в версии |
---|---|---|---|
тпл | Имя фрагмента, служащего шаблоном ресурса. Если не указан, свойства выводятся для каждого ресурса | .||
tplOdd | Имя фрагмента, служащего шаблоном ресурса для ресурсов с нечетным значением idx (см. Свойство idx) | ||
тпл Первый | Имя блока, служащего шаблоном ресурса для первого ресурса | ||
tpl Последний | Имя блока, служащего шаблоном ресурса для последнего ресурса | ||
tpl_N | Имя фрагмента, служащего шаблоном ресурса для N-го ресурса, например & tpl_4 = tpl4th | ||
тпл_нН | Имя блока, служащего шаблоном ресурса для каждого N-го ресурса, например, & tpl_n4 = tpl4th будет применяться к любому элементу, кратному 4 | 1.4,1 | |
tpl Состояние | Определяет поле ресурса для сравнения с ключами, определенными в свойстве & conditionalTpls. Должно быть поле ресурса; не работает с шаблонными переменными. | 1.5.0 | |
условныйTpls | Объект JSON, определяющий карту значений полей и связанных фрагментов tpl для использования, когда поле, определенное & tplCondition, соответствует значению : & conditionalTpls = {"1": "tplA", "2": "tplB", " 3 ":" tplC "} [ПРИМЕЧАНИЕ: tplOdd, tplFirst, tplLast, * и tpl_ {n} будут иметь приоритет над любыми заданными условными Tpls] | 1.5,0 | |
tplPath | Необязательный каталог для поиска фрагментов на основе файлов при использовании @FILE | assets_path + «elements / chunks /» | |
tplWrapper | Имя фрагмента, служащего шаблоном оболочки для вывода [ПРИМЕЧАНИЕ. Не работает с toSeparatePlaceholder]. Заполнитель, куда вставляются элементы, — [[+ output]] . | 1.6.0 | |
wrapIfEmpty | Если true, будет выводить оболочку, указанную в & tplWrapper, даже если вывод пуст. | ложь | 1.6.0 |
выходной сепаратор | Необязательная строка для разделения каждого экземпляра tpl (разделитель) | «\ n» | |
к заполнителю | Если установлено, результат будет назначен этому заполнителю вместо того, чтобы выводить его напрямую. | ||
для отдельных держателей | Если установлено, КАЖДЫЙ результат будет назначен отдельному заполнителю, названному этим параметром, с суффиксом с порядковым номером (начиная с 0). | 1.3.0 |
Около @FILE и @INLINE tpls :
Вы можете префикс любого свойства tpl с помощью @FILE или @INLINE, чтобы использовать фрагмент на основе файла или встроенную разметку соответственно.
- @FILE — этот префикс позволяет вам предоставить файл вместо Chunk в базе данных в качестве tpl. Указанные вами путь и имя файла по умолчанию, если вы не укажете настраиваемое свойство
tplPath
, будут искать @FILE tpl относительно настроенного вамиassets_path
+elements / chunks /
. - @INLINE — этот префикс позволяет указать разметку для использования в tpl непосредственно в значении свойства. Рекомендуется использовать это только при указании свойств tpl * в [Набор свойств], в противном случае любые заполнители в вашей встроенной разметке могут быть оценены до того, как содержимое будет передано в getResources, поскольку кешируемые вложенные теги в MODX Revolution оцениваются перед обработкой содержащий тег начинается. После этого должен быть пробел, например
@INLINE [[+ pagetitle]]
Свойства выбора¶
Имя | Описание | Значение по умолчанию | Добавлено в версии |
---|---|---|---|
родители | Разделенный запятыми список идентификаторов, выступающих в качестве родительских.Используйте -1, чтобы игнорировать родителей при указании _resources_to include. Если этого не сделать, getResources принимает & parent в качестве текущего ресурса и считывает оттуда своих потомков (плюс ресурсы, указанные в & resources = неожиданные результаты). | текущий идентификатор ресурса | |
ресурсов | Список идентификаторов, разделенных запятыми, для включения в результаты. Префикс идентификатора с тире, чтобы исключить ресурс из результата. | ||
глубина | Целочисленное значение, указывающее глубину поиска ресурсов от каждого родителя.Первый уровень ресурсов ниже родительского — глубина | .10 | |
твФильтры | Может использоваться для фильтрации ресурсов по определенным значениям TV. Они вводятся как [( tvname ) ( operator )] ( value ). Есть два разделителя, которые можно использовать для объединения условий фильтрации. Вы можете использовать фильтры «ИЛИ», используя два символа вертикальной черты. Фильтр ИЛИ выбирает ресурсы, которые имеют одно из перечисленных значений TV. Смотрите ниже для получения дополнительной информации. | ||
Сортировка | Любое поле ресурса ( за исключением переменных шаблона. См. Ниже свойство «sortbyTV» ). Некоторые общие поля для сортировки — это publishon, menuindex, pagetitle и т. Д., Но для всех полей см. Документацию по ресурсам. Указывайте поля только с именем, не используя синтаксис тега. Обратите внимание, что при использовании таких полей, как шаблон, опубликованный и подобные для сортировки, они будут отсортированы по необработанным значениям, то есть по шаблону или идентификатору пользователя, а НЕ по их именам. Смотрите ниже для получения дополнительной информации. | создано на | |
опубликовано на | Изменено в 1.3,0 | ||
sortbyAlias | Псевдоним запроса для поля сортировки | ||
Сортировка сбежавших | Экранирует имя поля, указанное в sortby | ||
sortdir | Порядок сортировки по | DESC | |
sortbyTV | Переменная шаблона для сортировки по | 1. 2.0 | |
sortdirTV | Порядок сортировки при использовании sortbyTV | DESC | 1.2,0 |
sortbyTV Тип | Укажите тип данных для сортировки ТВ. Возможные значения: строка, целое число, десятичное число, дата и время | .строка | 1.3.0 |
предел | Ограничивает количество возвращаемых ресурсов. Используйте 0 для получения неограниченных результатов. | 5 | |
смещение | Смещение ресурсов, возвращенных критериями пропуска | 0 | |
где | Выражение критериев в стиле JSON для создания дополнительных предложений where.См. Пример ниже. См. Display / xPDO20 / xPDOQuery. Где | ||
контекст | Разделенный запятыми список ключей контекста для ограничения результатов; если пусто, будут использоваться контексты для всех указанных родителей (все контексты, если указан 0) |
Использование
и tvFilters
¶ Для и tvFilters
значение может выглядеть следующим образом:
mytv == somevalue || mytv == othervalue
Вы также можете использовать фильтр «и» через запятую. Это обеспечит соблюдение всех условий.
mytv == somevalue, othertv == othervalue
Для расширенной фильтрации вы также можете сгруппировать их. Важно знать, что сначала условия разделяются разделителем ИЛИ (||), а затем разделителем И (,). Итак, возьмем этот гипотетический пример:
mytv == foo || mytv == bar, bartv == 3 || bartv == 1
Это отфильтрует ресурсы для удовлетворения одного из следующих условий:
- mytv — это LIKE foo, или
- mytv — это LIKE bar, И bartv — LIKE 3, или
- bartv — это КАК 1
В приведенных выше примерах выполняется поиск точных значений.Вы также можете использовать знак процента (%) в качестве подстановочного знака. Например:
mytv ==% a%
Соответствует любым ресурсам, у которых есть «a» в значении mytv.
mytv == a%
Соответствует любым ресурсам, значение mytv которых начинается с «a»
mytv ==% a
Соответствует любым ресурсам, значение mytv которых заканчивается на «a».
Вы также можете комбинировать это с разделителями ИЛИ (||) и И (,), описанными выше.
Важно знать, что эта функция смотрит на исходное значение переменной шаблона для конкретного ресурса. Это означает, что значение было явно установлено для ресурса и что оно не было обработано типом вывода переменной шаблона ( или значение по умолчанию в выпусках до 1.4.2-pl; это Release добавляет поддержку фильтрации, которая включает значения по умолчанию ). Так что, если у вас есть телевизор с автоматической пометкой, это означает, что исходное значение представляет собой список, разделенный запятыми, и он не разбивается на теги, как вы видите в диспетчере.
Новые операторы фильтров доступны в 1.4.2-pl :
Начиная с версии 1.4.2-pl getResources, есть ряд новых операторов сравнения, которые можно использовать при создании условий фильтрации. Кроме того, при использовании многих из этих новых операторов числовые значения сравнения автоматически преобразуются в числовые значения перед сравнением.
Вот список действующих операторов:
Оператор фильтра | Оператор SQL | Числовые значения CAST | Банкноты |
---|---|---|---|
<=> | <=> | Есть | NULL сейф равен |
=== | = | Есть | |
! == | ! = | Есть | |
<> | <> | Есть | |
== | КАК | № | |
! = | НЕ НРАВИТСЯ | № | |
<< | < | Есть | |
<= | <= | Есть | |
= < | = < | Есть | |
>> | > | Есть | |
> = | > = | Есть | |
=> | => | Есть |
Использование & sortby¶
Можно передать любое поле ресурса в качестве значения сортировки, например pagetitle
, alias
, Published on
, menuindex
и т. Д.
Вы можете отсортировать случайным образом, указав RAND (), например:
& sortby = `RAND ()`
Начиная с версии 1.3.0, это также может быть массив JSON для сортировки по нескольким полям, например
& sortby = `{" publishedon ":" ASC "," createdon ":" DESC "}`
Для сортировки в определенном порядке укажите список идентификаторов ресурсов, например
& sortby = `ПОЛЕ (modResource.id, 4,7,2,5,1)`
То же самое возможно, если вы поместите отсортированные идентификаторы в переменную шаблона, например:
& sortby = `ПОЛЕ (modResource.id, [[* templateVariable]]) `
В некоторых случаях вам необходимо (несколько парадоксально) указать также направление сортировки:
& sortby = `ПОЛЕ (modResource.id, 4,7,2,5,1)` & sortdir = `ASC`
Другая недвижимость¶
Имя | Описание | Значение по умолчанию | Добавлено в версии |
---|---|---|---|
показать | Если true, также будут отображаться ресурсы, если они не опубликованы. | 0 | |
показать Удален | Если true, также будут отображаться ресурсы независимо от того, были ли они удалены. | 0 | |
показатьHidden | Если true, ресурсы будут отображаться независимо от того, скрыты ли они из меню. | 0 | |
скрыть Контейнеры | Если установлено, ресурсы, помеченные как контейнер (isfolder), отображаться не будут. | 0 | |
includeContent | Указывает, следует ли возвращать содержимое каждого ресурса в результатах. | 0 | |
включают телевизоры | Указывает, должны ли значения TemplateVar быть включены в свойства, доступные для каждого шаблона ресурса. | 0 | |
включитьTVList | Необязательный разделенный запятыми список имен TemplateVar для явного включения, если includeTVs равно 1 | 1.4,0 | |
готовит телевизор | Подготавливает значения TemplateVar, зависящие от медиа-источника. | 1 | 1.5.0 |
подготовитьTVList | Ограничивает подготовленные телевизоры до тех, которые указаны по имени в списке с разделителями-запятыми. | 1.5.0 | |
технологические телевизоры | Указывает, должны ли значения TemplateVar отображаться так, как они были бы для резюмируемого ресурса. TemplateVars должны быть включены (см. IncludeTVs / includeTVList) для обработки. | 0 | |
процессTVList | Необязательный разделенный запятыми список имен TemplateVar для явной обработки. Указанные здесь TemplateVars должны быть включены через includeTVs / includeTVList | .1.4.0 | |
tvPrefix | Префикс для свойств TemplateVar | телевизор. | |
idx | Вы можете определить начальный idx ресурсов, который является свойством, которое увеличивается при отображении каждого ресурса. | 1 | |
первая | Определите idx, который представляет первый ресурс | 1 | |
последняя | Определите idx, который представляет последний ресурс. По умолчанию количество суммируемых ресурсов + первое — 1 | ||
всего Вар | Определите ключ заполнителя, установленного getResources, указывающий общее количество ресурсов, которые будут выбраны , а не с учетом _limit_value. | всего | |
отладка | Если true, отправит запрос SQL в журнал MODX. | ложь |
Доступные заполнители¶
Заполнители, доступные для ваших блоков форматирования getResources, в основном зависят от ресурсов, которые вы повторяете.
См. Все теги на странице «Часто используемые теги шаблонов», на которой перечислены свойства, доступные для всех ресурсов.
Если в вашем ресурсе есть переменные шаблона, они будут иметь соответствующие заполнители (помните, что заполнители будут использовать префикс, определенный параметром & tvPrefix ).
Дополнительно имеются следующие заполнители:
Заполнитель | Описание |
---|---|
[[+ idx]] | Увеличивается с каждой итерацией, начиная с 1 (или значения, установленного параметрами и idx ) |
Примеры¶
Также см. Подраздел «Примеры» в этой документации для получения более подробных примеров и руководств.
Вывести список дочерних ресурсов текущего ресурса, используя блок myRowTpl:
[[getResources? & родители = `[[* id]]` & tpl = `myRowTpl`]]
Вывести все ресурсы ниже ресурса с идентификатором 5, за исключением ресурса 10, используя блок myRowTpl:
[[getResources? & parent = `5` & resources =` -10` & tpl = `myRowTpl`]]
Вывести только указанные ресурсы, используя блок myRowTpl:
[[getResources? & parent = `-1` & resources =` 10,11,12` & tpl = `myRowTpl`]]
Выведите 5 самых последних опубликованных ресурсов под ресурсом с идентификатором ‘5’ с tpl ‘blogPost’:
. [[getResources? & parent = `5` & limit =` 5` & tpl = `blogPost` & includeContent =` 1`]]
Вывести список дочерних ресурсов текущего ресурса, основанный на шаблоне ресурса:
[[getResources? & parent = `[[* id]]` & where = `{" template: = ": 8}` & tpl = `myRowTpl`]]
Вывести список дочерних ресурсов текущего ресурса, где ID шаблона ресурса равен 1 или 2:
[[getResources? & parent = `[[* id]]` & where = `{" template: = ": 1," OR: template: = ": 2}` & tpl = `myRowTpl`]]
Вывести список дочерних ресурсов текущего ресурса, где ID шаблона ресурса — 1, 2 или 3 (вы не можете использовать одно и то же имя ключа более одного раза):
[[getResources? & parent = `[[* id]]` & where = `{" template: IN ": [1,2,3]}` & tpl = `myRowTpl`]]
Отображать сообщение, если результаты не найдены (эквивалент «пустого» параметра в Ditto):
[[getResources: default = `Ничего не найдено`? & родители = `[[* id]]` & tpl = `myRowTpl`]]
Пример использования встроенного Tpl
[[getResources? & tpl = `@ INLINE [[+ pagetitle]] `]]
Обертывание getResources приводит к другой разметке (например, к свойству & outerTpl, которого нет для getResources из версии 1. 6.0, вы все еще можете сделать это так или использовать свойство & tplWrapper).
[[getResources? ... & toPlaceholder = `results`]]
[[+ results: notempty = ` [[+ results]]
`]]
Отображение переменных шаблона с помощью getResources¶
Чтобы сократить время получения, getResources по умолчанию не получает значения TV. Если вы хотите отображать телевизоры, вы должны включить следующие параметры:
& includeTVs = `1` & processTVs =` 1`
Вам также необходимо поставить перед всеми телевизорами префикс tv.или используйте этот параметр в своем теге сниппета:
& tvPrefix = ``
В блоке Tpl, который вы используете для отображения вывода getResources, используйте тег-заполнитель, подобный этому (но с именем вашего телевизора):
[[+ tv.my_tv]]
Использование getPage для разбивки на страницы¶
В сочетании с getPage (или pdoPage) getResources позволяет выполнять мощную и гибкую разбивку на страницы на ваших страницах.
Примеры¶
Получите первые 10 ресурсов, отсортированных по опубликованным, под идентификатором ресурса 17, не более чем на 2 уровня в глубину, с tpl ‘blogListPost’, включая телевизоры и контент:
[[! GetPage?
& elementClass = `modSnippet`
& element = `getResources`
& родители = `17`
& depth = `2`
& limit = `10`
& pageVarKey = `страница`
& includeTVs = `1`
& includeContent = `1`
& tpl = `blogListPost`
]]
[! + стр.nav]]
и чанк blogListPost:
[[+ опубликовано: strtotime: date = `% b% d% Y`]]
[[+ pagetitle]] .......................................................
Автор:
[[+ createdby: userinfo = `username`]]
[[+ интротекст]]
<час />
Устранение неполадок
Ничего не происходит¶
Прежде чем удариться головой об стену, проверили ли вы, действительно ли это дополнение установлено на вашем сайте?
Массив атрибутов сброшен¶
Вы забыли включить параметр & tpl
. Без параметра & tpl
сниппет будет извлекать указанные ресурсы, но вы не сказали ему, как их форматировать. Убедитесь, что вы включили параметр & tpl
в свой вызов сниппета, например
[[! GetResources? & parent = `5` & limit =` 5` & tpl = `blogPost`]]
Или, возможно, вы неправильно написали имя блока. Возможно, у вас ДЕЙСТВИТЕЛЬНО указаны и tpl
, но существует ли этот кусок на самом деле? Если вы назовете несуществующий кусок, getResources не будет знать, как отформатировать ваши результаты.
Или, даже если вы правильно указали параметр & tpl
, вы могли случайно забыть амперсанд в одном из ваших _других_параметров. Например.
limit = `5`
приведет к сбою вызова сниппета и сбросу атрибутов. Правильный формат должен быть
& limit = `5`
Один и тот же ресурс выводится несколько раз
(1. 2.2 и предыдущие версии) ¶ Если вы видите один и тот же ресурс в списке несколько раз, попробуйте опустить параметр & sortbyTV
.
Контента нет¶
Вы извлекаете правильные ресурсы и видите, что некоторые_ результаты отформатированы правильно, но заполнители [[+ content]]
ничего не содержат. В чем дело? Вы должны включить аргумент & includeContent = 1
, чтобы получить контент.
Проблемы с кешированием при использовании tpl, tpl_N, tpl_nN, tplFirst, tplLast или tplOdd¶
Если вы используете эти параметры, возможно, вы думали о повторном использовании фрагмента tpl, чтобы избежать повторения кода.Например:
Общий фрагмент Tpl: [[$ GenericTplChunk]]
Привет [[+ pagetitle]]
Четвертый блок Tpl (tpl_nN): [[$ 4thTplChunk]]
[[$ GenericTplChunk]]
Если у вас возникли проблемы с пустыми или странными результатами, это связано с кешированием MODX. Вызов некэшированного фрагмента не сработает. Вы должны использовать трюк: фиктивный тег при вызове универсального блока.
[[$ GenericTplChunk? & idx = `[[+ idx]]`]]
Примечание: фрагмент не нужно называть некэшированным.
См. По адресу: http://forums.modx.com/thread/43748/chunk-inside-getresources-template-not-processed-correctly
См. Также
Если вам нужно получить только одно поле из внешнего ресурса, попробуйте использовать getResourceField.
Новые и улучшенные популярные сообщения MODX Счетчик посещений
* ОБНОВЛЕНИЕ [2019/01]: есть новое дополнение MODX, которое разработано с нуля, чтобы быть более точным и гибким — способным обрабатывать вариант использования «Самые популярные страницы» плюс многое другое.Посмотрите здесь.
Если вы когда-либо хотели отобразить список самых популярных страниц или сообщений в блоге на своем сайте MODX CMS, вы либо написали свой собственный фрагмент PHP, либо использовали этот метод с помощью HitsPage. Но теперь в городе появился новичок …
Просмотров
Hits написан выпускником основной команды MODX @jpdevries. Его отличие от HitsPage заключается в том, что вместо хранения обращений на телевизоре используется настраиваемая таблица базы данных. Реализация проста и проста: вызовите сниппет в одну сторону, и попадания будут регистрироваться по идентификаторам ресурсов; назовите его по-другому, и он выводит идентификаторы с наибольшим количеством совпадений.Подайте это в getResources, и все готово.
Получить
- Вы можете установить его через Управление пакетами в MODX Revolution.
- Вы также можете скачать пакет здесь
- В официальных документах для него еще нет документации, но сам сниппет дает вам все необходимые примеры использования. Одно предостережение: начиная с версии 1.2.0 есть несколько исправлений, поэтому я подробно расскажу о настройке здесь.
Запишите свои хиты
Эта часть до смешного проста. Где-нибудь в шаблоне каждой страницы, на которой вы хотите записывать обращения, вызовите сниппет следующим образом:
[[! Попаданий? & punch = `[[* id]]`]]
Вот и все. Это записывает попадание для текущего ресурса каждый раз, когда он запрашивается.
Показать самые популярные страницы
Для этого есть два (очень простых) шага. Сначала вы снова вызываете Hits Snippet, на этот раз чтобы перечислить идентификаторы с наибольшим количеством совпадений:
[[Попадания?
& родители = `2,6,10`
& limit = `3`
& outputSeparator = `,`
& chunk = `hitID`
& toPlaceholder = `hits`
]]
Разбейте его:
- & parent = `2,6,10` » Произвольный список идентификаторов ресурсов, разделенных запятыми, дочерние ресурсы которого будут запрашиваться на предмет совпадений.Это позволяет ограничить объем конкурса популярности определенными разделами сайта. Если вы оставите его пустым, он будет использовать родительский элемент ресурса, для которого вы в настоящее время вызываете сниппет.
- & limit = `3` » Это просто указывает, сколько результатов нужно вернуть.
- & outputSeparator = `,` »Если вы загружаете результаты в другой сниппет, как мы, это делает вывод через запятую.
- & chunk = `hitID` » Это выходной шаблон (см. Ниже).
- & toPlaceholder = `hits` » Это отправляет результаты в заполнитель, который мы можем использовать в нашем вызове getResources (опять же, см. Ниже).
Блок «hitID» содержит только это: [[+ hit_key]]
. Это идентификатор запрашиваемого ресурса. Вызов getResources теперь будет «получать» ресурсы с наибольшим количеством совпадений, например:
[[getResources?
& родители = `-1`
& resources = `[[+ хиты]]`
& tpl = `myPostTpl`
]]
Разбейте его:
- & parent = `-1` » Это говорит getResources даже не искать родителей.Hits Snippet уже сделал это за нас. У этого есть приятный побочный эффект, заключающийся в том, что запрос getResources выполняется довольно быстро (подробнее об этом позже).
- & resources = `
[[+ hits]]
` »Нам действительно нужно сообщить getResources, какие ресурсы« получить ». Это свойство заполняется значением, возвращаемым фрагментом Hits, потому что мы поместили туда заполнитель[[+ hits]]
. Так что он получит самые популярные ресурсы. - & tpl = `myPostTpl` » Обязательное свойство getResources — фрагмент, используемый в качестве выходного шаблона.
И готово! Нам даже не нужно указывать getResources ограничивать результаты, потому что Hits Snippet предоставляет только необходимое количество идентификаторов для свойства & resources. Есть еще несколько вариантов для Hits, например, если вы хотите перечислить наименьших популярных страниц, или если вы хотите компенсировать результаты, чтобы вы показывали несколько «средних» популярных страниц;)
Обратной стороной этой настройки является то, что, поскольку она не сохраняет значения в телевизоре, вы не можете использовать ТВ-фильтры getResources, поэтому она немного менее гибкая. Однако большим плюсом является то, что он значительно быстрее — по моим тестам на 20% быстрее, но потенциально больше. Это потому, что все эти телевизионные запросы на самом деле довольно медленные. Эффективно спроектированный нестандартный стол по скорости выигрывает у стола, рассчитанного на бесконечную конфигурацию. Иногда это цена гибкости.
Вот и все. А теперь сделайте что-нибудь потрясающее с MODX — вот для чего он был создан: D
Выходной фильтр / модификаторы — синтаксис тега
Что такое фильтры? ¶
Фильтрыв Revolution позволяют управлять способом представления или анализа данных в теге.Они позволяют изменять значения внутри ваших шаблонов.
Входной фильтр
Выходной фильтр¶
В Revolution выходной фильтр применяет один или несколько серий выходных модификаторов, которые ведут себя аналогично вызовам PHx в MODX Evolution, за исключением того, что они встроены в ядро. Синтаксис выглядит так:
[[элемент: модификатор = `значение`]]
Их также можно объединять в цепочку (выполнять слева направо):
[[элемент: модификатор: anothermodifier = `value`: andanothermodifier: stillanother =` value2`]]
Вы также можете использовать их для изменения вывода сниппета; обратите внимание, что модификатор идет после имени фрагмента и перед вопросительным знаком, e.грамм.
[[mySnippet: modifier = `значение`? & mySnippetParam = `something`]]
Если у вас более длинный код в операторе : then = `...`: else = `...`
и вы хотите сделать его более читабельным, разместив его на нескольких строках, это нужно сделать следующим образом:
[[+ заполнитель: is = `0`: then =`
// код
`: else =`
// код
`]]
Модификаторы вывода¶
В следующей таблице перечислены некоторые из существующих модификаторов и показаны примеры их использования. Хотя приведенные ниже примеры являются тегами-заполнителями, модификаторы вывода можно использовать с любым тегом MODX. Убедитесь, что используемый заполнитель действительно принимает данные.
Модификаторы условного вывода¶
Модификатор | Описание | Пример |
---|---|---|
если, ввод | если — задает дополнительное условие. input — добавляет данные для обработки в тег | [[* id: is = `1`: and: if =` [[* id]] `: ne =` 2`: then = `Yes`: else =` No`]] |
или | Может использоваться для объединения модификаторов вывода в строку вместе с отношением «ИЛИ». | [[+ numbooks: is = `5`: or: is =` 6`: then = `Есть 5 или 6 книг!`: Else = `Не уверен, сколько книг`]] |
и | Может использоваться для объединения модификаторов вывода в строку вместе с отношением «И». | [[* numbooks: is = `1`: and: if =` [[* id]] `: ne =` 2`: then = `Yes`: else =` No`]] |
равно, равно, равно, равно, есть, уравнение | Сравнивает с переданным значением и переходит, если оно остается. Используется с then и else | [[+ numbooks: isequalto = `5`: then =` Всего 5 книг! `: Else =` Не уверен, сколько книг`]] |
notequalto, notequals, isnt, isnot, neq, ne | Сравнивает с переданным значением и переходит к следующему, если оно не то же самое.Используется с then и else | [[+ numbooks: notequalto = `5`: then =` Not sure how many books`: else = `Всего 5 книг!`]] |
большеthanorequalto, equalorgreaterthen, ge, например, isgte, gte | Сравнивает с переданным значением и продолжает, если оно больше или равно значению. Используется с «then» и «else». | [[+ numbooks: gte = `5`: then =` Есть 5 книг или больше 5 книг`: else = `Есть меньше 5 книг`]] |
isgreaterthan, morethan, isgt, gt | Сравнивает с переданным значением и переходит к следующему этапу, если оно больше значения. Используется с «then» и «else». | [[+ numbooks: gt = `5`: then =` Есть более 5 книг`: else = `Есть менее 5 книг`]] |
equaltoorlessthan, lessthanorequalto, el, le, islte, lte | Сравнивает с переданным значением и продолжает, если оно меньше или равно значению. Используется с «then» и «else». | [[+ numbooks: lte = `5`: then =` Есть 5 или меньше 5 книг`: else = `Есть больше чем 5 книг`]] |
islowerthan, islessthan, lowerthan, lessthan, islt, lt | Сравнивает с переданным значением и переходит к следующему шагу, если оно меньше значения.Используется с «then» и «else». | [[+ numbooks: lt = `5`: then =` Есть меньше 5 книг`: else = `Есть больше 5 книг`]] |
содержит | Проверяет, содержит ли значение переданную строку. | [[+ author: contains = `Samuel Clemens`: then =` Mark Twain`]] |
не содержит | Проверьте, не содержит ли значение переданную строку. | [[+ author: containsnot = `Samuel Clemens`: then =` Somebody Else`]] |
in, IN, inarray, inArray | Проверить, находится ли значение в массиве (через запятую) | [[+ id: in = `5,15,22`: then =` Yes in array`]] ` |
скрыть | Проверит предыдущие условия и скроет элемент, если условия были выполнены. | [[+ numbooks: lt = `1`: hide]] |
показать | Проверит предыдущие условия и покажет элемент, были ли они выполнены. | [[+ numbooks: gt = `0`: show]] |
, затем | Условное использование. | [[+ numbooks: gt = `0`: then =` Уже доступно! `]] |
еще | Условное использование вместе с then. | [[+ numbooks: gt = `0`: then =` Уже доступно! `: Else =` Извините, в настоящее время распроданы.`]] |
выбрать | Вывести замену, если значение находится в списке значений перед знаком равенства. В противном случае результат будет пустым. | [[+ numbooks: select = `0 = Value 0 & 1 = Value 1 & 2 = Value 2`]] |
член, член, мес | Проверяет, является ли пользователь членом указанной группы (групп). | [[+ modx.user.id: memberof = `Administrator`]] |
Модификаторы вывода строки¶
Модификатор | Описание | Пример |
---|---|---|
кот | Добавляет значение параметра (если не пусто) к входному значению | [[+ numbooks: cat = `books`]] |
после, добавить | Добавляет значение параметров к входному значению (если оба не пустые). Добавлено в 2.6.0. | [[+ totalnumber: after = `total`]] |
перед, добавить | Добавляет значение параметров к входному значению (если оба не пустые). Добавлено в 2.6.0. | [[+ booknum: before = `book #`]] |
lcase, нижний регистр, strtolower | Преобразует строки в нижний регистр. Похож на PHP strtolower | [[+ title: lcase]] |
верхний регистр, верхний регистр | Преобразует строки в верхний регистр.Подобно PHP strtoupper | [[+ заголовок: ucase]] |
ucwords | Преобразует первую букву слова в верхний регистр. Подобно PHP ucwords | [[+ title: ucwords]] |
ucfirst | Преобразует первую букву строки в верхний регистр. Подобно PHP ucfirst | [[+ name: ucfirst]] |
высота, высота | Заменяет любой символ, имеющий объект HTML, на этот объект.Подобно PHP htmlentities. Использует текущее значение, установленное системой modx_charset с флагом ENT_QUOTES | [[+ email: htmlent]] |
esc, побег | Безопасно экранирует символьные значения с помощью регулярного выражения и str_replace. | Также экранирует [,] и [[+ email: escape]] |
полоса | Заменяет все разрывы строк, табуляции и множественные пробелы одним пробелом. | [[+ textdocument: strip]] |
stripString | Удаляет строку указанного значения | [[+ name: stripString = `Mr.`]] |
заменить | Заменяет одно значение другим | [[+ pagetitle: replace = `Mr. == Mrs.`]] |
striptags, stripTags, notags, strip_tags | Удаляет HTML-теги из ввода. При необходимости принимает значение, указывающее, какие теги разрешить. Подобно PHP strip_tags | [[+ code: strip_tags = `]] |
stripmodxtags | Удаляет теги MODX из ввода.(Добавлено в v2.7) | [[+ code: stripmodxtags]] |
длина, длина, длина | Подсчитывает длину переданной строки. Подобно PHP strlen | [[+ длинная строка: strlen]] |
реверс, стрррев | Переворачивает ввод, символ за символом. Подобно PHP strrev | [[+ зеркальный текст: обратный]] |
перенос текста | Вставляет символ новой строки после заданного количества символов.Подобно переносу слов в PHP. Принимает необязательное значение для установки позиции переноса слов. | [[+ bodytext: wordwrap = `80`]] |
перенос слов | Вставляет символ новой строки после установленного количества символов, независимо от границ слова. Подобно переносу слов в PHP, с включенной функцией вырезания слов. Принимает необязательное значение для установки позиции переноса слов. | [[+ bodytext: wordwrapcut = `80`]] |
предел | Ограничивает строку определенным количеством символов.По умолчанию 100. | [[+ description: limit = `50`]] |
многоточие | Добавляет многоточие в строку и обрезает ее, если она длиннее определенного количества символов. В качестве точек останова используются только пробелы. По умолчанию 100. | [[+ description: ellipsis = `50`]] |
тег | Отображает необработанный элемент без тега:. Полезно для документации. | [[+ showThis: tag]] |
tvLabel | Отображение метки с телевизора, полезной при использовании флажков, флажков и т. Д., Где вы используете `Label == 1 | |
математика | Возвращает результат расширенного вычисления (дорого для процессора.не рекомендуется) Убрано в Revolution 2.2.6. | [[+ blackjack: add = `21`]] |
прибавить, прибавить, прибавить | Возвращает ввод, увеличенный на опцию (по умолчанию: +1) | [[+ загрузки: incr]] |
вычитание, уменьшение, убывание | Возвращает ввод, уменьшенный на опцию (по умолчанию: -1) | [[+ countdown: decr]] [[+ moneys: subtract = `100`]] |
умножить, mpy | Возвращает ввод, умноженный на опцию (по умолчанию: * 2) | [[+ trifecta: mpy = `3`]] |
деление, деление | Возвращает ввод, разделенный на опции (по умолчанию: / 2). Не принимает 0. | [[+ рейтинг: div = `4`]] |
модуль, модуль | Возвращает модуль параметра при вводе (по умолчанию:% 2, возвращает 0 или 1) | [[+ номер: mod]] или [[+ number: mod = `3`]] |
ifempty, default, empty, isempty | Возвращает входное значение, если пусто | [[+ name: default = `anonymous`]] |
notempty,! Empty, ifnotempty, isnotempty | Возвращает введенное значение, если не пусто | [[+ name: notempty = `Привет [[+ name]]!`]] |
nl2br | Преобразует символ новой строки (\ n) в элемент html.Используйте это, если вы вводите ввод и думаете, что в нем должны быть новые строки, а их нет. Подобно PHP nl2br. | [[+ textfile: nl2br]] |
дата | Форматирует временную метку unix в другой формат. Подобно PHP strftime. Значение — это формат. См. Раздел «Форматы даты». | [[+ год рождения: date = `% Y`]] |
strtotime | Преобразует строку даты в метку времени unix. Полезно сочетать это с фильтром вывода даты.Подобно PHP strtotime. Принимает свидание. См. Раздел «Форматы даты». | [[+ thetime: strtotime]] |
fuzzydate | Возвращает красивый формат даты с фильтрами вчера и сегодня. Принимает свидание. | [[+ createdon: fuzzydate]] |
назад | Возвращает дату в красивом формате в секундах, минутах, неделях или месяцах назад. Принимает дату (strtotime). | [[+ createdon: date = `% d-% m-% Y`: ago]] |
мкр5 | Создает хэш MD5 входной строки.Подобно PHP md5. | [[+ пароль: md5]] |
cdata | Оборачивает текст тегами CDATA | [[+ content: cdata]] |
информация пользователя | Возвращает запрошенные данные пользователя. Элемент должен быть идентификатором modUser ID. Поле значения — это столбец, который нужно захватить, например ФИО, электронная почта. См. Примеры ниже. | [[+ modx.user.id: userinfo = `username`]] |
зарегистрирован в | Возвращает истину, если пользователь аутентифицирован в этом контексте. | [[+ modx.user.id: isloggedin]] |
не зарегистрирован в | Возвращает истину, если пользователь не аутентифицирован в этом контексте. | [[+ modx.user.id: isnotloggedin]] |
к заполнителю | Помещает входное значение в переданный заполнитель. Не предотвращает вывод значения TV, поэтому добавьте [[* someTV: toPlaceholder = `placeholder`: notempty =` `]] , если вы не хотите выводить значение самого TV. | [[* someTV: toPlaceholder = `placeholder`]] |
cssToHead | Поместите элемент , где входное значение помещается внутри атрибута href. Использует modX.regClientCSS. | [[+ cssTV: cssToHead]] |
htmlToHead | Вставьте блок HTML-кода в заголовок страницы перед . Использует modX.regClientStartupHTMLBlock | [[+ htmlTV: htmlToHead]] |
htmlToBottom | Вставьте HTML-код в конце страницы перед |