Modx revo fastfield: fastField — fastField | MODX Docs
Фильтры ввода и вывода / Основы / Система / docs.modx.pro
Фильтры в Revolution позволяют манипулировать тем, как будут обрабатываться те или иные теги. Они позволяют вам изменять значения прямо внутри ваших шаблонов.
Фильтры ввода
В настоящее время фильтры ввода используются при подготовке к обработке фильтров вывода. Обычно они используются только внутри движка MODX.
Фильтры вывода
В Revolution фильтры вывода ведут себя так же, как и PHx в Evolution, только фильтры теперь встроены прямо в движок MODX. Синтаксис выглядит так:
[[element:modifier=`value`]]
Фильтры могут применяться последовательно. Для этого напишите их подряд (слева направо):
[[element:modifier:anothermodifier=`value`:andanothermodifier:yetanother=`value2`]]
Также фильтры могут применяться для модификации вывода сниппетов. Фильтр нужно прописывать перед всеми параметрами (перед знаком вопроса):
[[mySnippet:modifier=`value`? &mySnippetParam=`something`]]
Модификаторы вывода
В таблице представлены некоторые модификаторы и примеры их использования. В примерах модификаторы применяются к плейсхолдерам, но вы должны помнить, что они могут применяться к любым тегам MODX. Убедитесь, что используемый тег выводит хоть что-то, что модификатор будет обрабатывать.
Условные модификаторы вывода
Модификатор | Описание | Пример использования |
---|---|---|
if, input | Передаёт произвольный текст на ввод, для следующего модификатора | [[*id:input=`[[+placeholder]]`:is=`1`:then=`Да`:else=`Нет`]] |
or | Объединение нескольких модификаторов связью ИЛИ | [[+numbooks:is=`5`:or:is=`6`:then=`Здесь 5 или 6 книг`:else=`Не уверен, сколько книг`]] |
and | Объединение нескольких модификаторов связью И | [[+numbooks:gt=`5`:and:lt=`10`:then=`Здесь от 5 до 10 книг`:else=`Книг или меньше 5, или больше 10`]] |
isequalto, isequal, equalto, equals, is, eq | Сравнивает передаваемое значение с установленным. Если значения совпадают, выводится значение «then», если нет — «else» | [[+numbooks:isequalto=`5`:then=`Здесь 5 книг`:else=`Не уверен, сколько книг`]] |
notequalto, notequals, isnt, isnot, neq, ne | Сравнивает передаваемое значение с установленным. Если значения НЕ совпадают, выводится значение «then», если нет — «else» | [[+numbooks:notequalto=`5`:then=`Не уверен, сколько книг`:else=`Здесь 5 книг`]] |
greaterthanorequalto, equalorgreaterthen, ge, eg, isgte, gte | То же, только условие «Больше или равно» | [[+numbooks:gte=`5`:then=`Здесь 5 книг или больше`:else=`Здесь меньше пяти книг`]] |
isgreaterthan, greaterthan, isgt, gt | То же, только условие «Строго больше» | [[+numbooks:gt=`5`:then=`Здесь больше пяти книг`:else=`Здесь 5 книг или меньше`]] |
equaltoorlessthan, lessthanorequalto, el, le, islte, lte | То же, только условие «Меньше или равно» | [[+numbooks:lte=`5`:then=`Здесь 5 книг или меньше`:else=`Здесь больше пяти книг`]] |
islowerthan, islessthan, lowerthan, lessthan, islt, lt | То же, только условие «Строго меньше» | [[+numbooks:lte=`5`:then=`Здесь меньше пяти книг`:else=`Здесь 5 книг или больше`]] |
hide | Скрывает элемент, если условие выполняется | [[+numbooks:lt=`1`:hide]] |
show | Отображает элемент, если условие выполняется | [[+numbooks:gt=`0`:show]] |
then | Используется для составления условий | [[+numbooks:gt=`0`:then=`Книги в наличии!`]] |
else | Используется для составления условий (совместно с «then») | [[+numbooks:gt=`0`:then=`Книги в наличии!`:else=`Простите, но все продано.`]] |
memberof, ismember, mo | Проверяет, является ли пользователь членом указанной группы пользователей | [[!+modx.user.id:memberof=`Administrator`]] |
Модификаторы для работы со строками
Модификатор | Описание | Пример использования |
---|---|---|
cat | Добавляет значение после тега | [[+numbooks:cat=`книг`]] |
lcase, lowercase, strtolower | Переводит все буквы в нижний регистр | [[+title:lcase]] |
ucase, uppercase, strtoupper | Переводит все буквы в верхний регистр | [[+headline:ucase]] |
ucwords | Делает первую букву в словах заглавной | [[+title:ucwords]] |
ucfirst | Делает первую букву в строке заглавной | [[+name:ucfirst]] |
htmlent, htmlentities | Преобразует все символы в соответствющие HTML-сущности | [[+email:htmlent]] |
esc, escape | Безопасно экранирует символы, используя регулярные выражения и `str_replace()`. Также экранирует теги MODX. | [[+email:escape]] |
strip | Заменяет все переносы, табуляции и любое количество пробелов только одним пробелом | [[+textdocument:strip]] |
stripString | Вырезает из строки указанную подстроку | [[+name:stripString=`Mr.`]] |
replace | Производит замену подстрок | [[+pagetitle:replace=`Mr.==Mrs.`]] |
striptags, stripTags,notags,strip_tags | Вырезает все теги (можно указать разрешенные теги). Не используйте для обеспечения безопасности. | [[+code:strip_tags]] |
len,length, strlen | Выводит длину строки | [[+longstring:strlen]] |
reverse, strrev | Переворачивает строку символ за символом | [[+mirrortext:reverse]] |
wordwrap | Вставляет перенос строки после каждого n-ого символа (слова не разбиваются) | [[+bodytext:wordwrap=`80`]] |
wordwrapcut | Вставляет перенос строки после каждого n-ого символа, даже если этот символ будет внутри слова | [[+bodytext:wordwrapcut=`80`]] |
limit | Выводит определенное количество символов с начала строки (значение по умолчанию — 100) | [[+description:limit=`50`]] |
ellipsis | Добавляет многоточие и обрезает строку, если она длиннее, чем указанное количество символов (по умолчанию — 100) | [[+description:ellipsis=`50`]] |
tag | Экранирование. Отображает элемент так как он есть, без :tag. Для использования в документации | [[+showThis:tag]] |
add, increment, incr | Прибавляет указанное число (значение по умолчанию +1) | [[+downloads:incr]] [[+blackjack:add=`21`]] |
subtract, decrement, decr | Вычитает указанное число (значение по умолчанию -1) | [[+countdown:decr]] [[+moneys:subtract=`100`]] |
multiply, mpy | Умножает на указанное число (значение по умолчанию *2) | [[+trifecta:mpy=`3`]] |
divide,div | Делит на указанное число (значение по умолчанию /2) | [[+rating:div=`4`]] |
modulus,mod | Возвращает модуль числа (по умолчанию: %2, возвращает 0 или 1) | [[+number:mod]] |
ifempty,default,empty, isempty | Возращает значение модификатора, если значение тега пусто | [[+name:default=`anonymous`]] |
notempty, !empty, ifnotempty, isnotempty | Возращает значение модификатора, если значение тега непусто | [[+name:notempty=`Hello [[+name]]!`]] |
nl2br | Заменяет символы новой строки \n на HTML-тег br | [[+textfile:nl2br]] |
date | Переводит таймстамп в текст, в соответствии с указанным форматом (формат даты) | [[+birthyear:date=`%Y`]] |
strtotime | Переводит дату в виде текста в UNIX таймстамп | [[+thetime:strtotime]] |
fuzzydate | Принимает таймстамп и возвращает дату в виде «Сегодня в 16:20 PM» | [[+createdon:fuzzydate]] |
ago | Возвращает число секунд, минут, недель или месяцев, прошедших с даты, указанной в теге. | [[+createdon:ago]] |
md5 | Создает MD5-хеш значения | [[+password:md5]] |
cdata | Оборачивает вывод тегами CDATA | [[+content:cdata]] |
userinfo | Возвращает запрашиваемое значение из профиля пользователя. Необходимо указывать ID пользователя | [[!+modx.user.id:userinfo=`username`]] |
isloggedin | Возвращает 1, если пользователь авторизован в текущем контексте | [[!+modx.user.id:isloggedin:is=`1`:then=`Yes`:else=`No`]] |
isnotloggedin | Возвращает 1, если пользователь неавторизован в текущем контексте | [[!+modx.user.id:isnotloggedin:is=`1`:then=`No`:else=`Yes`]] |
urlencode | Конвертирует значение как URL, то есть применяет PHP фнукцию `urlencode()` | [[+mystring:urlencode]] |
urldecode | Конвертирует значение как из URL, то есть применяет PHP фнукцию `urldecode()` | [[+myparam:urldecode]] |
Модификаторы для работы с пользователями нужно вызывать некэшированными, чтобы каждый юзер видел актуальные данные.
Использование модификаторов вывода совместно с параметрами
Если у тега есть параметры, то их необходимо прописывать сразу после модификатора:
[[!getResources:default=`К сожалению, ничего не найдено`?
&tplFirst=`blogTpl`
&parents=`2,3,4,8`
&tvFilters=`blog_tags==%[[!tag:htmlent]]%`
&includeTVs=`1`
]]
Создание пользовательского модификатора
Любой сниппет может использоваться как модификатор вывода. Для этого просто укажите имя сниппета вместо модификатора. К примеру, создадим сниппет [[makeExciting]]
, добавляющий к выводу определенное количество восклицательных знаков:
[[*pagetitle:makeExciting=`4`]]
Такой вызов тега передаст в сниппет makeExciting следующие параметры для обработки:
Параметр | Значение | Значение в примере | Комментарий |
---|---|---|---|
input | Значение элемента | $input = `[[*pagetitle]]`; | Значение элемента, к которому применяется модификатор. |
options | Значение модификатора | $options = 4 ; | Дополнительные параметры (после знака = ) |
token | Тип элемента | $token = * ; | Cимвол, определяющий тип тега. |
name | Имя элемента | $name = `pagetitle`; | Имя плейсхолдера, к которому применяется модификатор. |
tag | Весь тег полностью | $tag = `[[*pagetitle:makeExciting=`4`]]`; | Весь тег, полностью. |
Приведем пример кода нашего сниппета makeExciting:
<?php
$defaultExcitementLevel = 1;
$result = $input;
if (isset($options)) {
$numberOfExclamations = $options;
}
else {
$numberOfExclamations = $defaultExcitementLevel;
}
for ($i = $numberOfExclamations; $i > 0; $i--) {
$result = $result . '!';
}
return $result;
Тег выводит всё, что возвращает сниппет. В нашем случае он вернет значение тега [[*pagetitle]]
с четырьмя восклицательными знаками.
Если сниппет вернет пустую строку, то на страницу будет выведено изначальное значение тега.
Цепочки фильтров (Множественные модификаторы)
Хорошим примером цепочки фильтров будет форматирование даты, например, так:
[[*publishedon:strtotime:date=`%d.%m.%Y`]]
Модификатор UserInfo
Прямой доступ к данным из таблицы modx_user_attributes в базе данных, с помощью модификаторов вывода вместо сниппетов, может быть достигнуто просто за счет использования модификатора UserInfo.
Выберите нужный столбец из таблицы и укажите его в качестве свойства модификатора, например, так:
Поле профиля | Пример |
---|---|
Внутренний ключ профиля | [[!+modx.user.id:userinfo=`internalKey`]] |
Логин | [[!+modx.user.id:userinfo=`username`]] |
Полное имя | [[!+modx.user.id:userinfo=`fullname`]] |
Роль | [[!+modx.user.id:userinfo=`role`]] |
[[!+modx.user.id:userinfo=`email`]] | |
Телефон | [[!+modx.user.id:userinfo=`phone`]] |
Мобильный телефон | [[!+modx.user.id:userinfo=`mobilephone`]] |
Факс | [[!+modx.user.id:userinfo=`fax`]] |
Дата рождения | [[!+modx.user.id:userinfo=`dob`:date=`%Y-%m-%d`]] |
Пол | [[!+modx.user.id:userinfo=`gender`]] |
Страна | [[!+modx.user.id:userinfo=`country`]] |
Область | [[!+modx.user.id:userinfo=`state`]] |
Почтовый индекс | [[!+modx.user.id:userinfo=`zip`]] |
Фото | [[!+modx.user.id:userinfo=`photo`]] |
Комментарий | [[!+modx.user.id:userinfo=`comment`]] |
Пароль | [[!+modx.user.id:userinfo=`password`]] |
Временный пароль | [[!+modx.user.id:userinfo=`cachepwd`]] |
Последняя авторизация | [[!+modx.user.id:userinfo=`lastlogin`:date=`%Y-%m-%d`]] |
Дата текущей авторизации | [[!+modx.user.id:userinfo=`thislogin`:date=`%Y-%m-%d`]] |
Количество авторизаций | [[!+modx.user.id:userinfo=`logincount`]] |
[[!+modx.user.id]]
возвращает id вошедшего в систему пользователя.
Конечно, вы можете заменить, его на [[*createdby]]
или другое поле ресурса или даже на плейсхолдер, который возвращает числовое представление id пользователя.
Обратите внимание, что профиль текущего пользователя уже доступен в MODX по умолчанию, так что вам не нужно использовать модификатор UserInfo для него:
[[!+modx.user.id]]
— Выведет идентификатор пользователя[[!+modx.user.username]]
— Выведет логин пользователя[[!+modx.user.fullname]]
— Полное имя пользователя[[!+modx.user.dob]]
— Дата рождения
Фильтр userinfo нужно вызывать некэшированным, иначе пользователи будут видеть чужие закэшированные данные.
pdoField / Сниппеты / pdoTools / docs.modx.pro
Этот сниппет одновременно обладает возможностями getResourceField и UltimateParent, то есть выводит любое поле указанного ресурса или его родителя, включая ТВ параметры.
Отличием от аналогов является работа с документами любых контекстов и возможность указать дополнительные параметры при выборке, что позволяет не выводить поля, например, скрытых ресурсов. Так же с помощью указания параметра &class можно получить поле любого объекта MODX. Может быть вызван как фильтр вывода.
Параметры
Принимает общие параметры выборки и результатов pdoTools и некоторые свои:
Параметр | По умолчанию | Описание |
---|---|---|
&id | Текущий документ | Идентификатор ресурса. |
&field | pagetitle | Поле ресурса. |
&top | Выбирает родителя указанного &id на уровне &top. | |
&topLevel | Выбирает родителя указанного &id на уровне &topLevel от корня контекста. | |
&default | Указывает поле ресурса, которое вернётся, если &field окажется пуст. Более быстрый аналог фильтра :default= | |
&output | Указывает строку, которая вернётся, если и &default, и &field оказались пусты. | |
&toPlaceholder | Если не пусто, сниппет сохранит все данные в плейсхолдер с этим именем, вместо вывода не экран. |
Если указаны &top или &topLevel, а &context нет, то для его определения будет сделан дополнительный запрос в базу данных.
Работу с чанками сниппет не поддерживает, так как возвращает значение только одного поля.
Примеры
Сниппет может быть вызван как фильтр вывода:
[[*id:pdofield=`longtitle`]]
При этом вы можете указывать параметры JSON массивом. Например, выбор второго родителя от ресурса и вывод его «longtitle»:
[[*id:pdofield=`{"top":2,"field":"longtitle"}`]]
Но лучше использовать обычный вызов — он и быстрее, и удобнее:
[[pdoField?
&id=`[[*id]]`
&field=`longtitle`
&top=`2`
]]
getFeed MODX Revolution
Что такое getFeed?
Это простой сниппер для поиска RSS фидов и повтора фрагментов фида с помощью Chunk.
Системные требования
- MODx Revolution 2.0.0-RC-2 или более новая версия
- PHP5 или более новая версия
История разработки
getFeed был написан Jason Coward как простой модуль для чтения фидов. Опубликован 11 Июня 2010 года.
Загрузка
Вы можете загрузить ПО с помощью менеджера MODx Revolution, используя [Package Management],
Использование
getFeed предназначен для размещения сниппета в контенте и фильтрации ‘url’ .
|
[[!getFeed? &url=`http://path.com/to/my/rss.feed.rss`]]
|
Свойства:
Наименование
|
Описание
|
Значение “по умолчанию”
|
url
|
Извлекаемый из фида URL
|
|
tpl
|
Название фрагмента кода, служащего как item tpl. Незаполненное будет использоваться под массив данных.
|
|
limit
|
Максимальное количество возвращаемых элементов; если 0 — неограниченно
|
0
|
offset
|
Номер элемента, от которого начинается отсчет. Отсчет ведется от 0.
|
0
|
totalVar
|
Название ячейки для хранения всех номеров элементов в фиде. Для совместимости с getPage.
|
total
|
toPlaceholder
|
Если установлено – будет использоваться в качестве исходных данных для заполнения. Если нет – на выходе будет непосредственно результат.
|
|
Чанк Плэйсхолдер
Т.к. различные фиды возвращают различные placeholder, лучше использовать getFeed без ‘tpl’ параметра. Это даст вам массив данных и их значений. Эти ‘indexes’, или ключи каждого элемента в массиве, могут использоваться как плэйсхолдер.
Наиболее распространенные плэйсхолдеры:
- title – заголок поста
- link – прямая ссылка на пост
- description – описание поста
- pubdate – дата публикации поста
- guid — GUID поста
- author – автор поста
- category – любые теги или ассоциации с постом
- summary – краткое резюме поста
- date_timestamp – временная метка поста
Twitter Feed MODX Revolution
Добавлено Shaun McCormick, изменено Mark Hamstra 20 октября 2011 (просмотр изменений)
Добавление Твиттера на сайт
Эта инструкция покажет вам как добавить фиды Твиттера на ваш сайт с помощью getFeed
Добавление вызова getFeed
После загрузки и инсталляции getFeed раместите сниппет на странице в том месте. Где планируете трансляцию фида Твиттера:
<ul>
[[!getFeed? &url=`http://twitter.com/statuses/user_timeline/123456789.rss` &tpl=`twitterFeedTpl` &limit=`3` ]]
</ul>
Убедитесь, что введен именно ваш ник или Twitter ID/
Таким образом мы вызовем данный сниппет без кэширования и укажем на новостную ленту Twittera.
Нам нужно только три последних твита. Для этого создайте ‘twitterFeedTpl чанк и добавьте в него:
<div> <p>[[+description]] <a href="[[+link]]">[[+pubDate:ago]]</a> via [[+twitter.source]]</p> </div>
Мы сделали это! Наш Твиттер фид рабоатет. Обратите внимание, у нас есть обратный фильтр, формат которого «X минут, X часов» назад.
Заметьте. Что плэйсхолдер, используемый для даты (так же как и другие плэйсхолдеры), может бытьзависимым от фида. Проверьте исходный XML код фида, чтобы убедиться, что дата сохранена и используется.
|
cat | Добавляет к тегу строку. | [[+num:cat=` раз`]], выведет к примеру «10 раз». |
lcase, lowercase, strtolower | Переведет значение тега в нижний регистр, аналогично функции php strtolower. | [[*pagetitle:lcase]] |
ucase, uppercase, strtoupper | Переведет текст в верхний регистр, аналогично функции php strtoupper. | [[*pagetitle:ucase]] |
ucwords | Переведет каждую первую букву, каждого слова в верхний регистр, аналогично функции php ucwords. | [[*pagetitle:ucwords]] |
ucfirst | Переведет только первую букву строки в верхний регистр, аналогично функции php ucfirst. | [[*pagetitle:ucfirst]] |
htmlent, htmlentities | Преобразует все символы в соответствющие HTML сущности (для тех символов, для которых HTML сущности существуют), аналогично функции php htmlentities. Использует текущие настройки системы «modx_charset» с флагом «ENT_QUOTES». | [[*pagetitle:htmlentities]] |
esc,escape | Экранирует разные «плохие символы», так же экранирует [, ] и `. | [[*content:esc]] |
strip | Заменяет все переносы строк, табуляции и множественные пробелы с на один пробел. | [[*content:strip]] |
stripString | Вырезает из строки заданную строку. | [[*pagetitle:stripString=`вц`]] |
replace | Обычная замена. | [[*pagetitle:replace=`вц==конфетка`]] |
striptags, stripTags,notags,strip_tags | Вырезает все теги, кроме разрешенных, аналогично функции php strip_tags | [[*longtitle:strip_tags=` `]] |
len,length, strlen | Возвращает длину строки, аналогично функции php strlen | [[*longtitle:strlen]] |
reverse, strrev | Переворачивает строку, аналогично функции php strrev | [[*longtitle:reverse]] |
wordwrap | Устанавливает переносы в зависимости от кол-ва символов слова, аналогично функции php wordwrap | [[*pagetitle:wordwrap=`10`]] |
limit | Устанавливает лимит на длинну строки и обрезает ее. | [[*pagetitle:limit=`10`]] |
ellipsis | Устанавливает лимит на длинну строки и обрезает ее, добавляя три точки в конце | [[*pagetitle:ellipsis=`10`]] |
tag | Вернет, запись тега. | [[*pagetitle:ellipsis=`10`:tag]]вернет: [[*pagetitle:ellipsis=`10`:tag]] |
add, increment, incr | Вернет, значение + модификатор ( по умолчанию +1 ). | [[+num:incr]] или [[+num:add=`97`]] |
subtract, decrement, decr | Вернет, значение — модификатор ( по умолчанию -1 ). | [[+num:decr]] или [[+num:decr=`97`]] |
multiply, mpy | Вернет, значение * модификатор ( по умолчанию *2 ). | [[+num:mpy]] или [[+num:mpy=`5`]] |
divide, div | Вернет, значение / модификатор ( по умолчанию /2 ). | [[+num:div]] или [[+num:div=`5`]] |
modulus, mod | Вернет, целочисленный остаток от деления значения на модификатор ( по умолчанию % 2. Вернет 1 или 0. ) | [[+num:mod]] или [[+num:mod=`5`]] |
ifempty, default, empty, isempty | Вернет, указанный модификатор, если значение пусто. | [[*pagetitle:empty=`Пусто`]] |
notempty, !empty, ifnotempty, isnotempty | Вернет, указанный модификатор, если значение не пусто. | [[*pagetitle:!empty=`Не пусто!`]] |
nl2br | Вернет строку с «<br />» или «<br>» вставленные перед всеми (\r\n, \n\r, \n и \r)…, аналогично функции php nl2br | [[*pagetitle:nl2br]][[*pagetitle:nl2br]] |
date | Аналогично функции PHP strftime. Значение — отформатировано. См. форматы дат. | [[+birthyear:date=`%Y`]] |
strtotime | Аналогично функции PHP strtotime. Вернет дату. См. форматы дат. | [[*createdon:strtotime]], — вернет типа «[[*createdon:strtotime]]» |
fuzzydate | Вернет дату. Типа вчера, сегодня…. | [[*createdon:fuzzydate]], — вернет типа «[[*createdon:fuzzydate]]» |
ago | Вернет дату в прошедших секундах, минутах, неделях или месяцах. | [[*createdon:ago]], — вернет типа «[[*createdon:ago]]» |
md5 | Аналогично функции php md5. | [[+password:md5]]. |
cdata | Вставляет строку в оболочку «CDATA» тегов. | [[*pagetitle:cdata]]. |
userinfo | Возвращает запрошенные модификаторов данные о пользователе. Значение должно быть id-пользователя ( modUser ). | [[+modx.user.id:userinfo=`username`]]. |
isloggedin | Возвращает true, если пользователь авторизирован в этом контексте. | [[+modx.user.id:isloggedin]]. |
isnotloggedin | Возвращает true, если пользователь не авторизирован в этом контексте. | [[+modx.user.id:isnotloggedin]]. |
toPlaceholder | Помещает результат вывода тега в плейсхолдер, причем там где был помещен — ничего не выводится, а телепортируется в указанный плейсхолдер. До этого модификатора можно использовать любые другие модификаторы. | [[+number:toPlaceholder=`итого`]], помещает содержимое [[+number]] в плейсхолдер [[+итого]]. Можно усложнять запись добавляя в левую часть выражения любые другие модификаторы: [[+number:is=`10`:then=`ровно 10`:else=`точно не 10!`:toPlaceholder=`итого`]], если [[+number]] = 10, тогда выводим в плейсхолдер [[+итого]]: «ровно 10», если же нет «точно не 10!». |
cssToHead | Прописывает файл CSS в <link> элемент перед закрывающим тегом </head>, где значение тега модификатора вписывается в аттрибут «href». Используется modX.regClientCSS. | [[+cssTV:cssToHead]] перед закрывающим тегом </head>, регистрирует CSS, например: <link rel=»stylesheet» href=»значение +cssTv» type=»text/css» /> |
htmlToHead | Вписывает значение тега перед закрывающим тегом </head>. Используется modX.regClientStartupHTMLBlock. | [[+htmlTV:htmlToHead ]] перед закрывающим тегом </head>, регистрирует значение тега [[+htmlTV]] в HTML код. |
htmlToBottom | Вписывает значение тега перед закрывающим тегом </body>. Используется modX.regClientHTMLBlock. | [[+htmlTV:htmlToBottom]] перед закрывающим тегом </body>, регистрирует значение тега [[+htmlTV]] в HTML код. |
jsToHead | Прописывает файл JS в <link> элемент перед закрывающим тегом </head>. Используется modX.regClientStartupScript. | [[+jsTV:jsToHead]] перед закрывающим тегом </head>, регистрирует JS, например: <script type=»text/javascript» src=»значение +jsTv»></script> |
jsToBottom | Прописывает файл JS в <link> элемент перед закрывающим тегом </body>. Используется modX.regClientScript. | [[+jsTV:jsToBottom]] перед закрывающим тегом </body>, регистрирует JS, например: <script type=»text/javascript» src=»значение +jsTv»></script> |
urlencode | Аналогично функции php urlencode. | [[+stringi:urlencode]]. |
urldecode | Аналогично функции php urldecode. | [[+stringi:urldecode]]. |
filterPathSegment | Аналогично механизму транслитезации заголовка (pagetitle) в урл (alias), конвертирует строку в формат ЧПУ. | [[+pagetitle:filterPathSegment]]. |
tvLabel | Возвращает подпись к полю из возможных значений TV. | [[+myTv:tvLabel]]. Например есть TV настроенное селектом с параметрами ввода: Черный==0||Белый==1||Красный==3. Если значение myTv = 3, модификатор вернет слово Красный |
Фильтры phx и модификаторы в modx revolution
Автор Алексей На чтение 12 мин. Просмотров 581 Опубликовано Обновлено
Сегодня полезная статья про фильтры phx и их модификаторы MODX Revo (другими словами различными условиями) при помощи которых вы сможете прямо внутри шаблонов, манипулировать значением различных тегов.
Фильтры ввода
В настоящее время фильтры ввода используются при подготовке к обработке фильтров вывода. Обычно они используются только внутри движка MODX.
Фильтры вывода
В MODX Revo фильтры вывода встроены прямо в движок и ведут себя так же, как и PHx в Evolution. Синтаксис выглядит так:
[[element:modifier=`value`]]
Фильтры могут применяться последовательно. Для этого напишите их подряд (слева направо):
[[element:modifier:anothermodifier=`value`:andanothermodifier:yetanother=`value2`]]
Также фильтры могут применяться для модификации вывода сниппетов. Фильтр нужно прописывать перед всеми параметрами (перед знаком вопроса):
[[mySnippet:modifier=`value`? &mySnippetParam=`something`]]
Модификаторы вывода
В примерах ниже модификаторы применяются к плейсхолдерам, но они могут применяться к любым MODX тегам. Убедитесь, что используемый тег выводит хоть что-то, что модификатор будет обрабатывать.
Условные модификаторы вывода
Модификатор | Описание | Пример использования |
---|---|---|
if, input | Передаёт произвольный текст на ввод, для следующего модификатора | [[*id:input=`[[+placeholder]]`:is=`1`:then=`Да`:else=`Нет`]] |
or | Объединение нескольких модификаторов связью ИЛИ | [[+numbooks:is=`7`:or:is=`8`:then=`Здесь 7 или 8 книг`:else=`Не уверен, сколько книг`]] |
and | Объединение нескольких модификаторов связью И | [[+numbooks:gt=`7`:and:lt=`10`:then=`Здесь от 7 до 10 книг`:else=`Книг или меньше 7, или больше 10`]] |
isequalto, isequal, equalto, equals, is, eq | Сравнивает передаваемое значение с установленным. Если значения совпадают, выводится значение «then», если нет — «else» | [[+numbooks:isequalto=`7`:then=`Здесь 7 книг`:else=`Не уверен, сколько книг`]] |
notequalto, notequals, isnt, isnot, neq, ne | Сравнивает передаваемое значение с установленным. Если значения НЕ совпадают, выводится значение «then», если нет — «else» | [[+numbooks:notequalto=`7`:then=`Не уверен, сколько книг`:else=`Здесь 7 книг`]] |
greaterthanorequalto, equalorgreaterthen, ge, eg, isgte, gte | То же, только условие «Больше или равно» | [[+numbooks:gte=`7`:then=`Здесь 7 книг или больше`:else=`Здесь меньше семи книг`]] |
isgreaterthan, greaterthan, isgt, gt | То же, только условие «Строго больше» | [[+numbooks:gt=`7`:then=`Здесь больше семи книг`:else=`Здесь 7 книг или меньше`]] |
equaltoorlessthan, lessthanorequalto, el, le, islte, lte | То же, только условие «Меньше или равно» | [[+numbooks:lte=`7`:then=`Здесь 7 книг или меньше`:else=`Здесь больше семи книг`]] |
islowerthan, islessthan, lowerthan, lessthan, islt, lt | То же, только условие «Строго меньше» | [[+numbooks:lte=`7`:then=`Здесь меньше семи книг`:else=`Здесь 7 книг или больше`]] |
hide | Скрывает элемент, если условие выполняется | [[+numbooks:lt=`1`:hide]] |
show | Отображает элемент, если условие выполняется | [[+numbooks:gt=`0`:show]] |
then | Используется для составления условий | [[+numbooks:gt=`0`:then=`Книги в наличии!`]] |
else | Используется для составления условий (совместно с «then») | [[+numbooks:gt=`0`:then=`Книги в наличии!`:else=`Простите, но все продано.`]] |
memberof, ismember, mo | Проверяет, является ли пользователь членом указанной группы пользователей | [[!+modx.user.id:memberof=`Administrator`]] |
Зачем они нужны и как ими пользоваться?
phx модификаторы облегчают жизнь modx разработчикам. Допустим у нас есть сайт с каруселью изображений (ну или с баннером), который нужно выводить только на главной странице. Для этого достаточно поместить его в отдельный чанк и затем вывести в шаблоне при помощи такой конструкции
[[*id:is=`1`:then=`[[$carusel]]`]]
Где:
- 1 — id главной страницы;
- $carusel — чанк с кодом карусели (баннера).
Здесь:
- *id — выводит id текущей страницы;
- :is=`1`:then= — проверяет равно ли *id == 1? и если равно, то выводится содержимое then;
- $carusel — выводит чанк carusel.
Вместо *id, можно использовать и другие поля, например *template — выведет текущий используемый шаблон. Либо можно проверять заполнено или нет TV-поле (пусть будет *keywords) и если оно заполнено, то выводить его. Разберем данный случай поподробнее. Дано стандартная разметка:
<meta name="keywords" content="ключ, ключ, ключ">
Задача: не выводить эту строку, если TV keywords не заполнено, т.е. делаем проверку tv на пустоту и если оно не пустое, то выводим его.
Решение.
[[*keywords:!empty=`<meta name="keywords" content="*keywords">`]]
Нагрузки
Нужно следить за обработкой модификаторов, бездумное их использование вызовет лишние нагрузки. Вернемся к карусели, данная запись считывается слева направо и МОДХ выполняет все вложенные условия, в независимости от того, верное условие или нет, будет ли выводится на текущей странице содержимое [[$carusel]], в любом случае его содержимое обработается. В связи с этим более целесообразно переписать запись:
[[$caru[[*id:is=`1`:then=`sel`]]]]
В этом случае, содержимое чанка $carusel, будет обработано в случае, если выполняется условие *id:is=`1` т.к. выполняется [[*id:is=`1`:then=`sel`]]
и если id текущей страницы равно 1, последнее что обрабатывается — [[$carusel]], если id не равно 1, тогда — [[$caru]]. А если чанка $caru — нет в элементах, то и нагрузки не будет.
А вообще идеальный вывод будет выглядеть так.
[[$[[*id:is=`1`:then=`carusel`]]]]
Примечание! Вы можете комбинировать сколько угодно модификаторов под логику работы компонентов сайта, но главное помните, их основная суть — облегчить разработку, а не усложнять без того сложные задачи. Обычно, самый эффективный и действенный способ — это самый простой, так как чем проще и понятней конструкция — тем легче с ней будет работать в дальнейшем. Ниже перечислены основные модификаторы, которые можете использовать для любого тега МОДХ Рево.
Модификаторы для работы со строками
Модификатор | Описание | Пример использования |
---|---|---|
cat | Добавляет значение после тега | [[+numbooks:cat=`книг`]] |
lcase, lowercase, strtolower | Переводит все буквы в нижний регистр | [[+title:lcase]] |
ucase, uppercase, strtoupper | Переводит все буквы в верхний регистр | [[+headline:ucase]] |
ucwords | Делает первую букву в словах заглавной | [[+title:ucwords]] |
ucfirst | Делает первую букву в строке заглавной | [[+name:ucfirst]] |
htmlent, htmlentities | Преобразует все символы в соответствющие HTML-сущности | [[+email:htmlent]] |
esc, escape | Безопасно экранирует символы, используя регулярные выражения и `str_replace()`. Также экранирует теги MODX. | [[+email:escape]] |
strip | Заменяет все переносы, табуляции и любое количество пробелов только одним пробелом | [[+textdocument:strip]] |
stripString | Вырезает из строки указанную подстроку | [[+name:stripString=`Mr.`]] |
replace | Производит замену подстрок | [[+pagetitle:replace=`Mr.==Mrs.`]] |
striptags, stripTags,notags,strip_tags | Вырезает все теги (можно указать разрешенные теги). Не используйте для обеспечения безопасности. | [[+code:strip_tags]] |
len,length, strlen | Выводит длину строки | [[+longstring:strlen]] |
reverse, strrev | Переворачивает строку символ за символом | [[+mirrortext:reverse]] |
wordwrap | Вставляет перенос строки после каждого n-ого символа (слова не разбиваются) | [[+bodytext:wordwrap=`80`]] |
wordwrapcut | Вставляет перенос строки после каждого n-ого символа, даже если этот символ будет внутри слова | [[+bodytext:wordwrapcut=`80`]] |
limit | Выводит определенное количество символов с начала строки (значение по умолчанию — 100) | [[+description:limit=`50`]] |
ellipsis | Добавляет многоточие и обрезает строку, если она длиннее, чем указанное количество символов (по умолчанию — 100) | [[+description:ellipsis=`50`]] |
tag | Экранирование. Отображает элемент так как он есть, без :tag. Для использования в документации | [[+showThis:tag]] |
add, increment, incr | Прибавляет указанное число (значение по умолчанию +1) | [[+downloads:incr]] [[+blackjack:add=`21`]] |
subtract, decrement, decr | Вычитает указанное число (значение по умолчанию -1) | [[+countdown:decr]] [[+moneys:subtract=`100`]] |
multiply, mpy | Умножает на указанное число (значение по умолчанию *2) | [[+trifecta:mpy=`3`]] |
divide,div | Делит на указанное число (значение по умолчанию /2) | [[+rating:div=`4`]] |
modulus,mod | Возвращает модуль числа (по умолчанию: %2, возвращает 0 или 1) | [[+number:mod]] |
ifempty,default,empty, isempty | Возращает значение модификатора, если значение тега пусто | [[+name:default=`anonymous`]] |
notempty, !empty, ifnotempty, isnotempty | Возращает значение модификатора, если значение тега непусто | [[+name:notempty=`Hello [[+name]]!`]] |
nl2br | Заменяет символы новой строки \n на HTML-тег br | [[+textfile:nl2br]] |
date | Переводит таймстамп в текст, в соответствии с указанным форматом (формат даты) | [[+birthyear:date=`%Y`]] |
strtotime | Переводит дату в виде текста в UNIX таймстамп | [[+thetime:strtotime]] |
fuzzydate | Принимает таймстамп и возвращает дату в виде «Сегодня в 16:20 PM» | [[+createdon:fuzzydate]] |
ago | Возвращает число секунд, минут, недель или месяцев, прошедших с даты, указанной в теге. | [[+createdon:ago]] |
md5 | Создает MD5-хеш значения | [[+password:md5]] |
cdata | Оборачивает вывод тегами CDATA | [[+content:cdata]] |
userinfo | Возвращает запрашиваемое значение из профиля пользователя. Необходимо указывать ID пользователя | [[!+modx.user.id:userinfo=`username`]] |
isloggedin | Возвращает 1, если пользователь авторизован в текущем контексте | [[!+modx.user.id:isloggedin:is=`1`:then=`Yes`:else=`No`]] |
isnotloggedin | Возвращает 1, если пользователь неавторизован в текущем контексте | [[!+modx.user.id:isnotloggedin:is=`1`:then=`No`:else=`Yes`]] |
urlencode | Конвертирует значение как URL, то есть применяет PHP фнукцию `urlencode()` | [[+mystring:urlencode]] |
urldecode | Конвертирует значение как из URL, то есть применяет PHP фнукцию `urldecode()` | [[+myparam:urldecode]] |
Модификаторы для работы с пользователями нужно вызывать некэшированными, чтобы каждый юзер видел актуальные данные.
Использование модификаторов вывода совместно с параметрами
Если у тега есть параметры, то их необходимо прописывать сразу после модификатора:
[[!pdoResources:default=`К сожалению, ничего не найдено`?
&tplFirst=`blogTpl`
&parents=`2,3,4,8`
&tvFilters=`blog_tags==%[[!tag:htmlent]]%`
&includeTVs=`1`
]]
Создание пользовательского модификатора
Любой сниппет может использоваться как модификатор вывода. Для этого просто укажите имя сниппета вместо модификатора. К примеру, создадим сниппет [[makeExciting]]
, добавляющий к выводу определенное количество восклицательных знаков:
[[*pagetitle:makeExciting=`4`]]
Такой вызов тега передаст в сниппет makeExciting следующие параметры для обработки:
Параметр | Значение | Значение в примере | Комментарий |
---|---|---|---|
input | Значение элемента | $input = `[[*pagetitle]]`; | Значение элемента, к которому применяется модификатор. |
options | Значение модификатора | $options = 4 ; | Дополнительные параметры (после знака = ) |
token | Тип элемента | $token = * ; | Cимвол, определяющий тип тега. |
name | Имя элемента | $name = `pagetitle`; | Имя плейсхолдера, к которому применяется модификатор. |
tag | Весь тег полностью | $tag = `[[*pagetitle:makeExciting=`4`]]`; | Весь тег, полностью. |
Приведем пример кода нашего сниппета makeExciting:
<?php
$defaultExcitementLevel = 1;
$result = $input;
if (isset($options)) {
$numberOfExclamations = $options;
}
else {
$numberOfExclamations = $defaultExcitementLevel;
}
for ($i = $numberOfExclamations; $i > 0; $i--) {
$result = $result . '!';
}
return $result;
Тег выводит всё, что возвращает сниппет. В нашем случае он вернет значение тега [[*pagetitle]]
с четырьмя восклицательными знаками.
Если сниппет вернет пустую строку, то на страницу будет выведено изначальное значение тега.
Цепочки фильтров (Множественные модификаторы)
Хорошим примером цепочки фильтров будет форматирование даты, например, так:
[[*publishedon:strtotime:date=`%d.%m.%Y`]]
Модификатор UserInfo
Прямой доступ к данным из таблицы modx_user_attributes в базе данных, с помощью модификаторов вывода вместо сниппетов, может быть достигнуто просто за счет использования модификатора UserInfo. Выберите нужный столбец из таблицы и укажите его в качестве свойства модификатора, например, так:
Поле профиля | Пример |
---|---|
Внутренний ключ профиля | [[!+modx.user.id:userinfo=`internalKey`]] |
Логин | [[!+modx.user.id:userinfo=`username`]] |
Полное имя | [[!+modx.user.id:userinfo=`fullname`]] |
Роль | [[!+modx.user.id:userinfo=`role`]] |
[[!+modx.user.id:userinfo=`email`]] | |
Телефон | [[!+modx.user.id:userinfo=`phone`]] |
Мобильный телефон | [[!+modx.user.id:userinfo=`mobilephone`]] |
Факс | [[!+modx.user.id:userinfo=`fax`]] |
Дата рождения | [[!+modx.user.id:userinfo=`dob`:date=`%Y-%m-%d`]] |
Пол | [[!+modx.user.id:userinfo=`gender`]] |
Страна | [[!+modx.user.id:userinfo=`country`]] |
Область | [[!+modx.user.id:userinfo=`state`]] |
Почтовый индекс | [[!+modx.user.id:userinfo=`zip`]] |
Фото | [[!+modx.user.id:userinfo=`photo`]] |
Комментарий | [[!+modx.user.id:userinfo=`comment`]] |
Пароль | [[!+modx.user.id:userinfo=`password`]] |
Временный пароль | [[!+modx.user.id:userinfo=`cachepwd`]] |
Последняя авторизация | [[!+modx.user.id:userinfo=`lastlogin`:date=`%Y-%m-%d`]] |
Дата текущей авторизации | [[!+modx.user.id:userinfo=`thislogin`:date=`%Y-%m-%d`]] |
Количество авторизаций | [[!+modx.user.id:userinfo=`logincount`]] |
[[!+modx.user.id]]
возвращает id вошедшего в систему пользователя. Конечно, вы можете заменить, его на [[*createdby]]
или другое поле ресурса или даже на плейсхолдер, который возвращает числовое представление id пользователя.
Обратите внимание, что профиль текущего пользователя уже доступен в MODX по умолчанию, так что вам не нужно использовать модификатор UserInfo для него:
[[!+modx.user.id]]
— Выведет идентификатор пользователя[[!+modx.user.username]]
— Выведет логин пользователя[[!+modx.user.fullname]]
— Полное имя пользователя[[!+modx.user.dob]]
— Дата рождения
Особое внимание обращаем на восклицательный знак [[!+modx.user.id]]. Он позволяет НЕ кэшировать содержимое вывода. Почему нужно не кешировать? Представим это так: на сайте 5 пользователей. Первый пользователь зашел на страницу с вызовом:
Добро пожаловать, [[!+modx.user.id:userinfo=`username`]]!
По задумке на этой странице, выводится приветственное сообщение пользователю. Так вот, если результат будет кешироваться, то при первом входе на эту страницу — сохранится имя пользователя который только что зашел — и всем остальным будет показываться не их имя, а имя того пользователя который вошел на эту страницу первым. Чтобы этого избежать — просто не кэшируем этот тэг, с помощью восклицательного знака перед вызовом [[!+modx…
P.s.: Не забываем отключать кэширование тегов, где нужно! Чтобы это сделать — нужно ИЗБАВЛЯТЬСЯ от восклицательных знаков
( ! ). Результаты большинства сниппетов вплоне себе могут работать из кэша.
Самые ходовые (популярные) фильтры и модификаторы MODX
условия if else
Чтобы составить условие на существование в БД параметра modx и при условие, что оно не пустое, то пишем следующий скрипт.
[[*id:gt=`0`:then=`В наличии!`:else=`Все продано.`]]
Проверка на значение: Если id равен 7, то выводим значение, иначе выполняем другое действие.
[[*id:is=`7`:then=`номер 7`:else=`не 7 номер`]]
Проверка на пустоту (empty)
К примеру у нас есть TV (дополнительное поле) «keywords» и соотвественно мета тег к нему и мы не хотим выводить его в код если поле пустое, тогда вывод будет следующим.
[[*keywords:!empty=`<meta name="keywords" content="[[*keywords]]">`]]
Обрезка текста (ellipsis)
Например, нам нужно вывести небольшой кусок текста (30 слов) пускай из поля content (содержимое — где редактор текста) и поставить в конце 3 точки.
[[*content:ellipsis=`30`]]
В следующем уроке разберем Форматирование дат и времени.
fastField — fastField | Документы MODX
Что такое fastField?
fastField — это плагин, который добавляет новый тип тега [[# ...]]
. Его можно использовать для отображения одного поля, включая переменные шаблона и свойства, другого ресурса для MODX Revolution 2.2+. Он также может отображать значение суперглобальных переменных PHP $ _POST, $ _GET и других.
История
fastField был впервые выпущен 29 ноября 2012 года компанией argnist.
Скачать
Плагин можно получить через диспетчер пакетов или загрузить вручную из репозитория.
Использование
Структура тега следующая: [[# resource_id.field]]
, где resource_id — это идентификатор необходимого ресурса, например. «123», а поле — это поле ресурса, например. «Заголовок страницы». Для переменных шаблона поле должно начинаться с «tv.». Для свойств ресурса перед ним следует указать «свойства». или «собственность.».
Для использования с глобальными массивами вы должны заменить resource_id именем массива, например. «сообщение» и поле по имени переменной.
В общем, этот плагин заменяет сниппеты getResourceField и getReqParam.
Примеры
Вернуть заголовок страницы из ресурса с идентификатором 123:
[[# 123.pagetitle]]
Возвращает интротекст родителя текущего ресурса и отображает описание пустого:
[[# [[* родитель]].introtext: default = `[[# [[* родительский]]. описание]]`]]
Или, что более эффективно (см. Эту статью в блоге о MODX):
[[[[[[* родитель]]. Introtext: default = `# [[* родительский]]. Описание`]]]]
Возвращает содержимое ресурсов в блоке rowTpl при использовании Wayfinder:
[[# [[+ wf.docid]]. Content]]
Вернуть ТВ изображение с ресурса с id 10:
[[# 10.tv.image]]
Возвращает свойство articlePerPage из ресурса с идентификатором 1 настраиваемого типа ресурса Articles
[[# 1.properties.articles.articlesPerPage]]
Вернуть значение $ _POST [‘myVar’]:
[[! # Post.myVar]]
Поддерживаемые глобальные массивы: $ _GET
, $ _POST
, $ _REQUEST
, $ _SERVER
, $ _FILES
, $ _COOKIE
, $ _SESSION
. Тип массива после # нечувствителен к регистру. Имя элемента массива чувствительно к регистру. Вы должны использовать некэшированный тег, например. [[! # Get.name]]
, для кэшированных ресурсов.
ВНИМАНИЕ! : Опасно использовать необработанные глобальные переменные на странице. Например, используйте выходной фильтр: stripTags для предотвращения XSS-атак (например, [[! # Get.name: stripTags]]
)!
Как это работает
MODX использует класс modParser для анализа тегов по умолчанию. Этот плагин добавляет класс fastFieldParser, расширяющий modParser. Таким образом, если modParser будет изменен в новой версии MODX, поведение плагина будет непредсказуемым.
.
fastField — Дополнения MODX | Документы MODX
Что такое fastField?
fastField — это плагин, который добавляет новый тип тега [[# ...]]
. Его можно использовать для отображения одного поля, включая переменные шаблона и свойства, другого ресурса для MODX Revolution 2.2+. Он также может отображать значение суперглобальных переменных PHP $ _POST, $ _GET и других.
История
fastField был впервые выпущен 29 ноября 2012 года компанией argnist.
Скачать
Плагин можно получить через диспетчер пакетов или загрузить вручную из репозитория.
Использование
Структура тега следующая: [[# resource_id.field]]
, где resource_id — это идентификатор необходимого ресурса, например. «123», а поле — это поле ресурса, например. «Заголовок страницы». Для переменных шаблона поле должно начинаться с «tv.». Для свойств ресурса перед ним следует указать «свойства». или «собственность.».
Для использования с глобальными массивами вы должны заменить resource_id именем массива, например. «сообщение» и поле по имени переменной.
В общем, этот плагин заменяет сниппеты getResourceField и getReqParam.
Примеры
Вернуть заголовок страницы из ресурса с идентификатором 123:
[[# 123.pagetitle]]
Возвращает интротекст родителя текущего ресурса и отображает описание пустого:
[[# [[* родитель]].introtext: default = `[[# [[* родительский]]. описание]]`]]
Или, что более эффективно (см. Эту статью в блоге о MODX):
[[[[[[* родитель]]. Introtext: default = `# [[* родительский]]. Описание`]]]]
Возвращает содержимое ресурсов в блоке rowTpl при использовании Wayfinder:
[[# [[+ wf.docid]]. Content]]
Вернуть ТВ изображение с ресурса с id 10:
[[# 10.tv.image]]
Возвращает свойство articlePerPage из ресурса с идентификатором 1 настраиваемого типа ресурса Articles
[[# 1.properties.articles.articlesPerPage]]
Вернуть значение $ _POST [‘myVar’]:
[[! # Post.myVar]]
Поддерживаемые глобальные массивы: $ _GET
, $ _POST
, $ _REQUEST
, $ _SERVER
, $ _FILES
, $ _COOKIE
, $ _SESSION
. Тип массива после # нечувствителен к регистру. Имя элемента массива чувствительно к регистру. Вы должны использовать некэшированный тег, например. [[! # Get.name]]
, для кэшированных ресурсов.
ВНИМАНИЕ! : Опасно использовать необработанные глобальные переменные на странице. Например, используйте выходной фильтр: stripTags для предотвращения XSS-атак (например, [[! # Get.name: stripTags]]
)!
Как это работает
MODX использует класс modParser для анализа тегов по умолчанию. Этот плагин добавляет класс fastFieldParser, расширяющий modParser. Таким образом, если modParser будет изменен в новой версии MODX, поведение плагина будет непредсказуемым.
.
fastField — Дополнения MODX | Документы MODX
Что такое fastField?
fastField — это плагин, который добавляет новый тип тега [[# ...]]
. Его можно использовать для отображения одного поля, включая переменные шаблона и свойства, другого ресурса для MODX Revolution 2.2+. Он также может отображать значение суперглобальных переменных PHP $ _POST, $ _GET и других.
История
fastField был впервые выпущен 29 ноября 2012 года компанией argnist.
Скачать
Плагин можно получить через диспетчер пакетов или загрузить вручную из репозитория.
Использование
Структура тега следующая: [[# resource_id.field]]
, где resource_id — это идентификатор необходимого ресурса, например. «123», а поле — это поле ресурса, например. «Заголовок страницы». Для переменных шаблона поле должно начинаться с «tv.». Для свойств ресурса перед ним следует указать «свойства». или «собственность.».
Для использования с глобальными массивами вы должны заменить resource_id именем массива, например. «сообщение» и поле по имени переменной.
В общем, этот плагин заменяет сниппеты getResourceField и getReqParam.
Примеры
Вернуть заголовок страницы из ресурса с идентификатором 123:
[[# 123.pagetitle]]
Возвращает интротекст родителя текущего ресурса и отображает описание пустого:
[[# [[* родитель]].introtext: default = `[[# [[* родительский]]. описание]]`]]
Или, что более эффективно (см. Эту статью в блоге о MODX):
[[[[[[* родитель]]. Introtext: default = `# [[* родительский]]. Описание`]]]]
Возвращает содержимое ресурсов в блоке rowTpl при использовании Wayfinder:
[[# [[+ wf.docid]]. Content]]
Вернуть ТВ изображение с ресурса с id 10:
[[# 10.tv.image]]
Возвращает свойство articlePerPage из ресурса с идентификатором 1 настраиваемого типа ресурса Articles
[[# 1.properties.articles.articlesPerPage]]
Вернуть значение $ _POST [‘myVar’]:
[[! # Post.myVar]]
Поддерживаемые глобальные массивы: $ _GET
, $ _POST
, $ _REQUEST
, $ _SERVER
, $ _FILES
, $ _COOKIE
, $ _SESSION
. Тип массива после # нечувствителен к регистру. Имя элемента массива чувствительно к регистру. Вы должны использовать некэшированный тег, например. [[! # Get.name]]
, для кэшированных ресурсов.
ВНИМАНИЕ! : Опасно использовать необработанные глобальные переменные на странице. Например, используйте выходной фильтр: stripTags для предотвращения XSS-атак (например, [[! # Get.name: stripTags]]
)!
Как это работает
MODX использует класс modParser для анализа тегов по умолчанию. Этот плагин добавляет класс fastFieldParser, расширяющий modParser. Таким образом, если modParser будет изменен в новой версии MODX, поведение плагина будет непредсказуемым.
.
fastField — fastField | Документы MODX
Что такое fastField?
fastField — это плагин, который добавляет новый тип тега [[# ...]]
. Его можно использовать для отображения одного поля, включая переменные шаблона и свойства, другого ресурса для MODX Revolution 2.2+. Он также может отображать значение суперглобальных переменных PHP $ _POST, $ _GET и других.
История
fastField был впервые выпущен 29 ноября 2012 года компанией argnist.
Скачать
Плагин можно получить через диспетчер пакетов или загрузить вручную из репозитория.
Использование
Структура тега следующая: [[# resource_id.field]]
, где resource_id — это идентификатор необходимого ресурса, например. «123», а поле — это поле ресурса, например. «Заголовок страницы». Для переменных шаблона поле должно начинаться с «tv.». Для свойств ресурса перед ним следует указать «свойства». или «собственность.».
Для использования с глобальными массивами вы должны заменить resource_id именем массива, например. «сообщение» и поле по имени переменной.
В общем, этот плагин заменяет сниппеты getResourceField и getReqParam.
Примеры
Вернуть заголовок страницы из ресурса с идентификатором 123:
[[# 123.pagetitle]]
Возвращает интротекст родителя текущего ресурса и отображает описание пустого:
[[# [[* родитель]].introtext: default = `[[# [[* родительский]]. описание]]`]]
Или, что более эффективно (см. Эту статью в блоге о MODX):
[[[[[[* родитель]]. Introtext: default = `# [[* родительский]]. Описание`]]]]
Возвращает содержимое ресурсов в блоке rowTpl при использовании Wayfinder:
[[# [[+ wf.docid]]. Content]]
Вернуть ТВ изображение с ресурса с id 10:
[[# 10.tv.image]]
Возвращает свойство articlePerPage из ресурса с идентификатором 1 настраиваемого типа ресурса Articles
[[# 1.properties.articles.articlesPerPage]]
Вернуть значение $ _POST [‘myVar’]:
[[! # Post.myVar]]
Поддерживаемые глобальные массивы: $ _GET
, $ _POST
, $ _REQUEST
, $ _SERVER
, $ _FILES
, $ _COOKIE
, $ _SESSION
. Тип массива после # нечувствителен к регистру. Имя элемента массива чувствительно к регистру. Вы должны использовать некэшированный тег, например. [[! # Get.name]]
, для кэшированных ресурсов.
ВНИМАНИЕ! : Опасно использовать необработанные глобальные переменные на странице. Например, используйте выходной фильтр: stripTags для предотвращения XSS-атак (например, [[! # Get.name: stripTags]]
)!
Как это работает
MODX использует класс modParser для анализа тегов по умолчанию. Этот плагин добавляет класс fastFieldParser, расширяющий modParser. Таким образом, если modParser будет изменен в новой версии MODX, поведение плагина будет непредсказуемым.
.