Разное

Phx modx: PHx — Школа MODX

Содержание

PHx — [MODX] Guru

PHx (Placeholders Xtended) добавляет новые возможности для отображения плейсхолдеров, тегов MODx (включая TV параметры) и теги настроек сайта. Рекурсивный парсер позволяет использовать вложенные теги. Возможно создавать свои модификаторы, путем создания сниппетов.

PHx поддерживает следующие теги MODx:


[+placeholder+]
[*теги содержимого*] ([*content*], [*pagetitle*], например)
[*TV параметры*]
[(теги настройки)] (например, [(base_url)], [(site_name)] и другие)

Использование

Обычный плейсхолдер вида [+placeholder+] легко превращается в плейсхолдер PHx: [+placeholder:esc+]. Тоже самое вы можете сделать с тегом содержимого:

[*createdby*]

Добавляем модификатор:

[*createdby:date=`%a %B %d, %Y at %H:%M`*]

Также можно использовать несколько модификаторов сразу. Они будут обработаны слева направо:

somevar:esc:nl2br:strip
Расширенное применение

Наличие специального плейсхолдера «phx» позволяет использовать синтаксис PHx без наличия реальной переменной.

[+phx:if=`[+this+]`:is=`[+that+]`:then=`do this`:else=`do that`+]

С некоторыми модифиакторами этот плейсхолдер приобретает определенное значение. В случае с модификатором «userinfo» он возвращает соответствующее значение из информации о текущем пользователе:

[+phx:userinfo=`username`+]

Синтаксис

Хотя это и кажется логичным, но на этом стоит заострить внимание. Избегайте использования следующих конструкций в шаблоне, если они не являются частью тега MODx:


[+
[*
[(
+]
*]
)]
]]

Парсер попытается их обработать и MODx выдаст ошибку. Обычно такой проблемы не возникает. Но в случае с JavaScript у вас может быть конструкция, похожая на эту:

array[counter++]

которая спровоцирует странное поведени из-за +].

Также закрывающий тег CDATA может создать проблемы.

/* ]]> */

Помните, что вы не сможете потерять данные вашего сайта, используя неправильный синтаксис PHx. Худшее, что может случится — ваш шаблон неправильно отобразится.

Модификаторы

lcase

— Возвращает строку, приведенную к нижнему регистру.

[+string:lcase+]

ucase

— Приведет все символы строки к верхнему регистру.

[+string:ucase+]

ucfirst

— Первая буква в строке станет заглавной.

[+ucfirst:lcase+]

ellipsis

— Обрежет строку.

[+description:ellipsis=`150`]

length | len

— Возвратит длину строки.

[+string:len+]

notags

— Вырежет все HTML теги из строки.

[+string:notags+]

esc

— Удаляет html теги и разрывы строк

[+string:esc+]

htmlent

— Конвертирует исходную переменную в html сущности. Аналог htmlentities() в PHP.

[+string:htmlent+]

nl2br

— Конвертирует символы перевода строки в теги.

[+string:nl2br+]

strip

— Удалит символы новой строки(\n), табуляторы(\t), идущие подряд пробелы.

[+string:strip+]

reverse

— Перевернет задом наоборот буквы.

[+string:reverse+]

wordwrap

— Устанавливает переносы в зависимости от кол-ва символов слова, аналогично функции php (По умолчанию: 70).

[*pagetitle:wordwrap=`10`*]

limit

— Возвратит первые X символов от текущего значения (По умолчанию: 100).

[*pagetitle:limit=`50`*]

date

— Преобразует метку времени unix timestamps в соответствии с заданным форматом.

[*createdon:date=`%d.%m.%Y`*]

md5

— Создает MD5-хэш текущего значения.

[*pagetitle:md5*]

userinfo

— Возвращает запрошенные модификаторов данные о пользователе.

[+phx:userinfo=`username`+]
  • cachepwd : Cache password
  • comment : Comment
  • country : Страна
  • dob : Дата рождения в формате времени UNIX
  • email : Email
  • fax : Факс
  • fullname : Полное имя
  • gender : Пол
  • internalKey : User internal key
  • lastlogin : Last login, in UNIX time format
  • logincount : Number of logins
  • mobilephone : Мобильный телефон
  • password : Пароль
  • phone : Телефон
  • photo : Фотография
  • role : Роль
  • state : Статус
  • thislogin : This login, in UNIX time format
  • username : Логин
  • zip : Почтовый индекс

math

— Использовать вычисления, такие, как — * + /.

«?» символ заменяется текущим значением расширения, но вы также можете использовать вложенные теги.

[+price:math=`?*[+curs+]`+] 

ifempty

— Использовать «другое значение» если значение placeholder или templatevar пустое.

[*longtitle:ifempty=`[*pagetitle*]`*]

select

— Принимает значение, в зависимости от значений placeholder или templatevar.

[+placeholder:select=`0=OFF&1=ON&2=UNKNOWN`+]

Условные выражения

is — равно (==)

— алиасы: eq

ne — не равно (!=)

— алиасы: isnot, isnt

eg — больше или равно (>=)

— алиасы: isgt

el — меньше или равно (

— алиасы: islt

gt — больше (>)

lt — меньше (

mo=`Webgroups`

— алиасы: isinrole, ir, memberof

Принимает в качестве параметра разделенный запятыми список веб-групп и возвращает значение true/false в зависимости от того, принадлежит текущий пользователь к какой-либо из этих групп или нет (заменяет собой модификатор «inrole», который необходимо было сочетать с условным оператором).

[+phx:mo=`Администраторы`:then=`Я админ`:else=`Я простой смертный`+]


if=`value`

— Принимает в качестве параметра переменную для сравнения. Также может быть использовано в сочетании с :or или :and.

[+phx:if=`[+price+]`:gt=`0`:then=`Цена: [+price+]`+]


or

— Логическое ИЛИ (проверяется, верно ли первое или второе условие).

[+phx:if=`[*id*]`:is=`2`:or:is=`3`:then=`{{Chunk}}`:else=`{{OtherChunk}}`+]


and

— Логическое И (проверяется, верны ли оба условия).

[+phx:if=`[!UltimateParent!]`:is=`1`:and:isnot=`[*id*]`:then=`{{ChildChunk}}`:else=`{{ParentChunk}}`+]


then =`template`

— Значение template отображается, когда все условия верны. Здесь можно указать вызов {{чанка}}, [[сниппета]] или же чистый HTML.

else =`template`

— Значение template отображается, когда все условия не верны. Здесь можно указать вызов {{чанка}}, [[сниппета]] или же чистый HTML.


show

— Используется подобно then, но в качестве шаблона для вывода используется исходное значение. Выполняется, если условия верны.

[+myplaceholder:len:gt=`3`:show+]


Примеры


[+myplaceholder:is=`myvalue`:then=`Правильно`:else=`Неправильно`+]


[+myplaceholder:isnot=`myvalue`:then=`Правильно`:else=`Неправильно`+]
[+myplaceholder:is=`othervalue`:then=`Правильно`:else=`Неправильно`+]


[+myplaceholder:is=`2`:then=``:else=``+]


[+myplaceholder:gt=`1`:then=`Yes`:else=`No`+]
[+myplaceholder:lt=`3`:and:gt=`1`:then=`Yes`:else=`No`+]
[+myplaceholder:lt=`[+someplaceholder+]`:then=`Yes`:else=`No`+]
[+myplaceholder:islt=`2`:then=`Yes`:else=`No`+]
[+myplaceholder:isnot=`2`:or:lt=`3`:then=`Yes`:else=`No`+]


[+myplaceholder:isnot=`2`:then=`Yes`:else=`No`+]
[+myplaceholder:gt=`[+someplaceholder+]`:then=`Yes`:else=`No`+]
[+myplaceholder:lt=`2`:then=`Yes`:else=`No`+]
[+myplaceholder:gt=`2`:then=`Yes`:else=`No`+]
[+myplaceholder:lt=`1`:then=`Yes`:else=`No`+]

Фильтры phx ( модификаторы ) в MODx REVOLUTION

МодификаторОписаниеПример
catДобавляет к тегу строку.[[+num:cat=` раз`]], выведет к примеру «10 раз».
lcase, lowercase, strtolowerПереведет значение тега в нижний регистр, аналогично функции php strtolower.[[*pagetitle:lcase]]
ucase, uppercase, strtoupperПереведет текст в верхний регистр, аналогично функции php strtoupper.[[*pagetitle:ucase]]
ucwordsПереведет каждую первую букву, каждого слова в верхний регистр, аналогично функции php ucwords.[[*pagetitle:ucwords]]
ucfirstПереведет только первую букву строки в верхний регистр, аналогично функции phpucfirst.[[*pagetitle:ucfirst]]
htmlent, htmlentitiesПреобразует все символы в соответствющие HTML сущности (для тех символов, для которых HTML сущности существуют), аналогично функции phphtmlentities. Использует текущие настройки системы «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]].
urlencodeАналогично функции php urlencode.[[+stringi:urlencode]].
urldecodeАналогично функции php urldecode.[[+stringi:urldecode]].

MODX фильтры (PhX), модификаторы












































МодификаторОписание
cat

Добавляет к тегу строку.


[[+num:cat=` раз`]], выведет «10 раз».

lcase, lowercase, strtolower

Переведет значение тега в нижний регистр, аналогично функции php strtolower.


[[*pagetitle:lcase]]

ucase, uppercase, strtoupper

Переведет текст в верхний регистр, аналогично функции php strtoupper.


[[*pagetitle:ucase]]

ucwords

Переведет каждую первую букву, каждого слова в верхний регистр, аналогично функции php ucwords.


[[*pagetitle:ucwords]]

ucfirst

Переведет только первую букву строки в верхний регистр, аналогично функции phpucfirst.


[[*pagetitle:ucfirst]]

htmlent, htmlentities

Преобразует все символы в соответствующие HTML сущности (для тех символов, для которых HTML сущности существуют), аналогично функции phphtmlentities. Использует текущие настройки системы «modx_charset» с флагом «ENT_QUOTES».


[[*pagetitle:htmlentities]]

esc,escape

Экранирует разные «плохие символы», так же экранирует [ ] и `.


[[*content:esc]]

strip

Заменяет все переносы строк, табуляции и множественные пробелы на один пробел.


[[*content:strip]]

stripString

Вырезает из строки заданную часть.


[[*pagetitle:stripString=`modx`]]

replace

Обычная замена.


[[*pagetitle:replace=`modx==конфетка`]]

striptags, stripTags, notags, strip_tags

Вырезает все теги, кроме разрешенных, аналогично функции php strip_tags.


[[*content:strip_tags]]


Теги которые надо разрешить, перечисляются в списке после знака равенства.


[[*content:strip_tags=`<p>`]]


Одно время существовала проблема с безопасностью при использовании этого модификатора, но ее исправили.

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`]]

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]]

date

Преобразует дату в указаный формат, аналогично функции PHP strftime.


[[+birthyear:date=`%Y`]]

strtotime

Аналогично функции PHP strtotime. Вернет дату в unix.


[[*createdon:strtotime]], — вернет типа «1505900347»

fuzzydate

Вернет дату. Типа вчера, сегодня…


[[*createdon:fuzzydate]], — вернет типа «сент. 20»

ago

Вернет дату в прошедших секундах, минутах, неделях или месяцах.


[[*createdon:ago]], —  вернет типа «3 лет, 5 месяцев назад»

md5

Вернет строку с шифрованием. Алгоритм хеширования аналогично функции php md5.


[[+password:md5]].

cdata

Вставляет строку в оболочку «CDATA» тегов. Для преобразования в XML


[[*pagetitle:cdata]].

userinfo

Возвращает запрошенные модификаторов данные о пользователе. Значение должно быть id-пользователя ( modUser ).


[[+modx.user.id:userinfo=`username`]].

isloggedin

Возвращает true, если пользователь авторизирован в этом контексте.


[[+modx.user.id:isloggedin]].

isnotloggedin

Возвращает true, если пользователь НЕ авторизирован в этом контексте.


[[+modx.user.id:isnotloggedin]].

urlencode

Кодирование url, аналогично функции php urlencode.


[[+stringi:urlencode]].

urldecode

Декодирование url, аналогично функции php urldecode.


[[+stringi:urldecode]].

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>, регистрирует значение тега в HTML код.

htmlToBottom

Вписывает значение тега перед закрывающим тегом </body>. Используется modX.regClientHTMLBlock.


[[+htmlTV:htmlToBottom]] перед закрывающим тегом </body>, регистрирует значение тега в 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>

Фильтры ввода-вывода MODX

Фильтры в Revolution позволяют манипулировать тем, как будут обрабатываться те или иные теги. Они позволяют вам изменять значения прямо внутри ваших шаблонов.

Фильтры ввода

В настоящее время фильтры ввода используются при подготовке к обработке фильтров вывода. Обычно они используются только внутри движка MODX.



Фильтры вывода


В MODX Revolution Фильтры вывода используются как один или нескольких модификаторов вывода, они схожи с PHx вызовами в MODx Evolution, но отличаются тем, что уже изначально встроены в ядро. Синтаксис модификаторов:

Фильтры могут применяться последовательно. Для этого напишите их подряд (слева направо):

Также фильтры могут применяться для модификации вывода сниппетов. Фильтр нужно прописывать перед всеми параметрами (перед знаком вопроса):

Модификаторы вывода


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



Условные модификаторы вывода

















Модификатор Описание Пример использования
if, input
or Объединение нескольких модификаторов связью ИЛИ [[+numbooks:is=`5`:or:is=`6`:then=`Здесь 5 или 6 книг`:else=`Не уверен, сколько книг`]]
and Объединение нескольких модификаторов связью И
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=`Простите, но все продано.`]]
select
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. Также экранирует символы [, ] и ` [[+email:escape]]
strip Заменяет все переносы, табуляции и любое количество пробелов только одним пробелом [[+textdocument:strip]]
stripString Вырезает из строки указанную подстроку [[+name:stripString=`Mr.`]]
replace Производит замену подстрок [[+pagetitle:replace=`Mr.==Mrs.`]]
striptags, stripTags,notags,strip_tags Вырезает все теги (можно указать разрешенные теги).
Не используйте для обеспечения безопасности.
[[+code:strip_tags=`<p>`]]
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]]
math Возвращает результат продвинутых вычислений (нагружает на процессор. Не рекомендуется)
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 Возвращает дату в формате «вчера, сегодня. ..». Принимает значение даты. [[+createdon:fuzzydate]]
ago Возвращает число секунд, минут, недель или месяцев, прошедших с даты, указанной в теге. [[+createdon:ago]]
md5 Создает MD5-хеш значения [[+password:md5]]
cdata Оборачивает вывод тегами CDATA [[+content:cdata]]
userinfo Возвращает запрашиваемое значение из профиля пользователя. Необходимо указывать ID пользователя [[+modx.user.id:userinfo=`username`]]
isloggedin Возвращает true, если пользователь аутентифицирован в текущем контексте [[+modx.user.id:isloggedin]]
isnotloggedin Возвращает true, если пользователь НЕаутентифицирован в текущем контексте [[+modx.user.id:isnotloggedin]]
urlencode Конвертирует значение в URL [[+mystring:urlencode]]
urldecode Конвертирует значение из URL [[+myparam:urldecode]]

Кеширование


В общем случае, содержимое плейсхолдера, которое изменяется динамически, не должно кешироваться. Например:

Результат работы примера может быть пустым, а может и нет. Как мы можем кешировать это? Пример, приведенный выше, отражает природу модификатора вывода.

Возможно применение модификаторов вывода в кешируемом плейсхолдере — но только если Сниппет может быть кеширован. Иначе, мы совершаем алогичное действие — пытаемся кешировать то, что не является статическим содержимым.

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



Использование модификаторов вывода совместно с параметрами


Если у тега есть параметры, то их необходимо прописывать сразу после модификатора:

Создание пользовательского модификатора


Любой сниппет может использоваться и как модификатор вывода. Для его использования просто укажите имя сниппета вместо модификатора. К примеру, создадим сниппет makeExciting, добавляющий к выводу определенное количество восклицательных знаков:

Такой вызов тега передаст в сниппет makeExciting следующие параметры для обработки:








Параметр Значение Значение в примере
input Значение элемента В переменной $input будет значение заголовка страницы ([[*pagetitle]])
options Значение модификатора (после знака =) $options = 4;
token Тип элемента $token = «*»; (символ, определяющий, что данный элемент — поле ресурса
name Имя элемента $name = «pagetitle»;
tag Весь тег полностью $tag = «[[*pagetitle:makeExciting=`4`]]»;

Цепочки фильтров (Множественные модификаторы)


Хорошим примером цепочки фильтров будет форматирование даты, например, так:

Модификатор UserInfo


Прямой доступ к данным из таблицы modx_user_attributes в базе данных, с помощью модификаторов вывода вместо сниппетов, может быть достигнуто просто за счет использования модификатора UserInfo. Выберите нужный столбец из таблицы и укажите его в качестве свойства модификатора, например, так:


[[!+modx.user.id]] возвращает ID вошедшего в систему пользователя. Вы, конечно, можете заменить, его на [[*createdby]] или другое поле ресурса или любой плейсхолдер, который возвращает числовое представление ID пользователя.


Обратите внимание, что ID пользователя и его логин уже доступны по умолчанию в MODX, так что вам не нужно использовать модификатор UserInfo:


[[!+modx.user.id]] - Выведет ID пользователя
[[!+modx.user.username]] - Выведет логин пользователя

Лучше всего эти плейсхолдеры вызывать некешируемыми, чтобы избежать неожиданных результатов.

Также фильтры можно использовать несколькими способами (что уменьшает время их выполнения):

Фильтры ввода-вывода (модификаторы) в MODX Revo // Веб-студия Cat-Art

Навигация по статье:


О фильтрах ввода-вывода в MODX Revolution

Фильтры в Revolution позволяют обрабатывать и изменять значения тегов внутри ваших шаблонов, чанков, сниппетов.

Фильтры ввода

В настоящее время фильтры ввода используются при подготовке к обработке фильтров вывода. Обычно они используются только внутри ядра MODX.

Фильтры вывода

В MODX Revolution фильтры вывода используются как один или нескольких модификаторов вывода, они схожи с PHx вызовами в MODx Evolution, но отличаются тем, что уже изначально встроены в ядро.

Синтаксис модификаторов:

[[+element:modifier=`value`]]

Фильтры могут применяться последовательно (пишутся слева направо):

[[+element:modifier=`value`:anothermodifier=`value2`:andanothermodifier:yetanother=`value3`]]

Также фильтры могут применяться для модификации вывода сниппетов. Фильтр нужно прописывать перед всеми параметрами (перед знаком вопроса):

[[snippet:modifier=`value`? &snippetParam=`something`]]

Модификаторы вывода

В таблице представлены некоторые модификаторы и примеры их использования. В примерах они применяются к плейсхолдерам, но вы должны помнить, что модификаторы могут применяться к любым тегам MODX Revolution.

МодификаторОписаниеПример использования
if, inputif — задает дополнительное условие, input — добавляет в тег обрабатываемые данные[[+num:is=`10`:and:if=`[[+num]]`:ne=`15`:then=`Да, равно 10 и не 15`]]
or, andОбъединение нескольких модификаторов связью ИЛИ, и связью И[[+numProducts:is=`10`:or:is=`11`:then=`Здесь 10 или 11 товаров`:else=`Не уверен, сколько товаров`]]
isequalto, isequal, equalto, equals, is, eqСравнивает передаваемое значение с установленным. Если значения совпадают, выводится значение «then», если нет — «else»[[+numProducts:isequalto=`10`:then=`Здесь 10 товаров`:else=`Не уверен, сколько товаров`]]
notequalto, notequals, isnt, isnot, neq, neСравнивает передаваемое значение с установленным. Если значения НЕ совпадают, выводится значение «then», если нет — «else»[[+numProducts:notequalto=`10`:then=`Не уверен, сколько товаров`:else=`Здесь 10 товаров`]]
greaterthanorequalto, equalorgreaterthen, ge, eg, isgte, gteТо же, только условие «Больше или равно»[[+numProducts:gte=`10`:then=`Здесь 10 товаров или больше`:else=`Здесь меньше 10 товаров`]]
isgreaterthan, greaterthan, isgt, gtТо же, только условие «Строго больше»[[+numProducts:gt=`10`:then=`Здесь больше 10 товаров`:else=`Здесь 10 товаров или меньше`]]
equaltoorlessthan, lessthanorequalto, el, le, islte, lteТо же, только условие «Меньше или равно»[[+numProducts:lte=`10`:then=`Здесь 10 товаров или меньше`:else=`Здесь больше 10 товаров`]]
islowerthan, islessthan, lowerthan, lessthan, islt, ltТо же, только условие «Строго меньше»[[+numProducts:lte=`10`:then=`Здесь меньше 10 товаров`:else=`Здесь 10 товаров или больше`]]
hideСкрывает элемент, если условие выполняется[[+numProducts:lt=`1`:hide]]
showОтображает элемент, если условие выполняется[[+numProducts:gt=`0`:show]]
thenИспользуется для составления условий[[+numProducts:gt=`0`:then=`Товары в наличии!`]]
elseИспользуется для составления условий (совместно с «then»)[[+numProducts:gt=`0`:then=`Товары в наличии!`:else=`Простите, но все продано. `]]
memberof, ismember, moПроверяет, является ли пользователь членом указанной группы пользователей[[+modx.user.id:memberof=`Administrator`]]

Модификаторы для работы со строками

МодификаторОписаниеПример использования
catДобавляет значение после тега[[+numProducts:cat=` товаров`]]
lcase, lowercase, strtolowerПереводит все буквы в нижний регистр[[+title:lcase]]
ucase, uppercase, strtoupperПереводит все буквы в верхний регистр[[+longtitle:ucase]]
ucwordsДелает первую букву в словах заглавной[[+title:ucwords]]
ucfirstДелает первую букву в строке заглавной[[+name:ucfirst]]
htmlent, htmlentitiesПреобразует все символы в HTML-сущности[[+email:htmlent]]
esc, escapeБезопасно экранирует символы, используя регулярные выражения и str_replace. Также экранирует символы [, ] и `[[+email:escape]]
stripЗаменяет все переносы, табуляции и любое количество пробелов только одним пробелом[[+textdocument:strip]]
stripStringВырезает из строки указанную подстроку[[+name:stripString=`Mr.`]]
replaceПроизводит замену подстрок[[+pagetitle:replace=`Mr.==Mrs.`]]
striptags, stripTags, notags, strip_tagsВырезает все теги (можно указать разрешенные теги).[[+code:strip_tags=`p>`]]
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]]
mathВозвращает результат продвинутых вычислений (нагружает на процессор. Не рекомендуется)
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=`Привет, [[+name]]!`]]
nl2brЗаменяет символы новой строки (\n) на HTML-тег br>[[+textfile:nl2br]]
dateПереводит таймстамп в текст, в соответствии с указанным форматом (Формат даты)[[+birthyear:date=`%Y`]]
strtotimeПереводит дату в виде текста в UNIX таймстамп[[+thetime:strtotime]]
fuzzydateВозвращает дату в формате «вчера, сегодня, …». Принимает значение даты.[[+createdon:fuzzydate]]
agoВозвращает число секунд, минут, недель или месяцев, прошедших с даты, указанной в теге.[[+createdon:ago]]
md5Создает MD5-хеш значения[[+password:md5]]
cdataОборачивает вывод тегами CDATA[[+content:cdata]]
userinfoВозвращает запрашиваемое значение из профиля пользователя. Необходимо указывать ID пользователя[[+modx.user.id:userinfo=`username`]]
isloggedinВозвращает true, если пользователь аутентифицирован в текущем контексте[[+modx.user.id:isloggedin]]
isnotloggedinВозвращает true, если пользователь НЕаутентифицирован в текущем контексте[[+modx.user.id:isnotloggedin]]
urlencodeКонвертирует значение в URL[[+mystring:urlencode]]
urldecodeКонвертирует значение из URL[[+myparam:urldecode]]

Использование модификаторов вывода совместно с параметрами

Если у тега есть параметры, то их необходимо прописывать сразу после модификатора:

[[pdoResources:default=`К сожалению, ничего не найдено`?
&parents=`5`
&includeTVs=`image`
&tpl=`news_tpl`
]]

Создание пользовательского модификатора

Любой сниппет может использоваться и как модификатор вывода. Для его использования просто укажите имя сниппета вместо модификатора. К примеру, создадим сниппет makeExciting, добавляющий к выводу определенное количество восклицательных знаков:

[[*pagetitle:makeExciting=`4`]]

Такой вызов тега передаст в сниппет makeExciting следующие параметры для обработки:

ПараметрЗначениеЗначение в примере
inputЗначение элементаВ переменной $input будет значение заголовка страницы ([[*pagetitle]])
optionsЗначение модификатора (после знака =)$options = 4
tokenТип элемента$token = «*» (символ, определяющий, что данный элемент — поле ресурса)
nameИмя элемента$name = «pagetitle»
tagВесь тег полностью$tag = «[[*pagetitle:makeExciting=`4`]]»

Модификатор 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`]]
E-mail[[!+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 пользователя.

Обратите внимание, что ID пользователя и его логин уже доступны по умолчанию в MODX, так что вам не нужно использовать модификатор UserInfo:

// Выведет ID пользователя
[[!+modx.user.id]]

// Выведет логин пользователя
[[!+modx.user.username]]

Лучше всего эти плейсхолдеры вызывать некэшируемыми, чтобы избежать неожиданных результатов.

Также фильтры можно использовать несколькими способами (что уменьшает время их выполнения):

// Используем модификатор:
[[+title:lcase]]

[[+something:notempty=`Hello [[+name]]`]]

// Используем сниппет:
[[lcase? &subject=`title`]]

[[notempty?
&subject=`something`
&then=`Hello [[+name]]`
]]

// Используем общий сниппет фильтра:
[[filter?
&subject=`title`
&operator=`lcase`
]]

[[filter?
&subject=`something`
&operator=`notempty`
&meter=`Hello [[+name]]`
]]

Кэширование

В общем случае, содержимое плейсхолдера, которое изменяется динамически, не должно кэшироваться.

Например:

[[+placeholder:default=`К сожалению, ничего не найдено`]]

Результат работы примера может быть пустым, а может и нет. Как мы можем кэшировать это? Пример, приведенный выше, отражает природу модификатора вывода.

Возможно применение модификаторов вывода в кэшируемом плейсхолдере — но только если сниппет может быть кэширован. Иначе, мы совершаем нелогичное действие — пытаемся кэшировать то, что не является статическим содержимым.

Получаем правило: нельзя устанавливать кэширование плейсхолдера в некэшируемом сниппете, если результат работы сниппета может изменяться.

Материал взят отсюда — Фильтры ввода-вывода


На поддержку блога

[Modx Evo] PHx как создавать условия от Василисы Белозеровой

Установка PHx

Новую версия плагина скачать можно тут

Закачиваем все файлы по этому адресу /assets/plugins/phx

Создаем новый плагин (Элементы — Управление элементами  — Плагины  — Создать плагин)

с именем PHx,

вставляем содержание файла phx.plugin.txt,

переходим на вкладку СИСТЕМНЫЕ СОБЫТИЯ и ставим галочку OnParseDocument

На вкладке КОНФИГУРАЦИЯ плагина вставляем

[pseudocode,N]&phxdebug=Лог событий;int;0 &phxmaxpass=Макс. число проходов;int;50

Имеется поддержка:

  • [+placeholder+]
  • [*теги содержимого*] ([*content*], [*pagetitle*], например)
  • [*TV параметры*]
  • [(теги настройки)] (например, [(base_url)], [(site_name)] и другие)

Поддерживает сниппеты:

Можно использовать все плейсходеры, для этого из вида [+placeholder+] приводим к виду [+placeholder:esc+]

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

[+phx:if=`[*id*]`:is=`[+that+]`:then=`do this`:else=`do that`+]

Это переводится как Если id страницы равен плейсходеру  that, то выводим  do this, иначе выводим  do that

  • is — равно
  • isnot — не равно
  • eg -больше либо равно
  • el — меньше либо равно
  • gt — больше
  • lt — меньше

Еще пример:

[+phx:if=`[+price+]`:gt=`10`:or:is=`44`:then=`Вы можете купить этот товар`:else=`{{Chunk}}`+]

Если цена больше 10, или равна 44, то выводим Вы можете купить этот товар, иначе выводим содержимое чанка

Вместо или (or) можно использовать и (and)

Или

[+phx:if=`[*longtitle*]`:is=«:then=`[*pagetitle*]`:else=`[*longtitle*]`+]

Если заполнен расширеный заголовок, то выводим расширеный, иначе выводим бычный заголовок

Создание условий с помощью сниппетов

В шаблон, в нужное место вывода прописываем:

[[slidih]]

Создаем новый сниппет с именем slidih, и вставляем в него содержание:

<?php if($modx->documentIdentifier == 1) {echo’ то что надо вывести на первой странице’;} else {<a href=»[(site_url)]»>Logo</a> } ?>


Записки веб разработчика.

Персональный блог.

Редирект на первый документ категории в Modx

Часто в сети Интернет встречаю сайты, которые используют многоуровневые выпадающие меню. Однако при проектировании или разработке подобных меню часто забывают про родительские пункты меню, которые при нажатии ведут на пустые страницы. Такие ошибки не только отрицательно сказывается на общем впечатлении посетителя от сайта, но и негативно влияют на представление о сайте в глазах поисковой системы. Возникает вопрос, как избежать подобных пунктов меню с пустыми страницами, особенно если контент для них не был предусмотрен?

Редирект на первый документ »

Просмотров: 1036

Комментариев: 0

Как защитить e-mail адреса от ботов в Modx

При создании сайта часто возникает необходимость указать на нем e-mail для связи. Если выложить e-mail без соответствующей защиты, то через пару дней или месяцев после индексации (это как повезет), вы начнете находить в почтовом ящике спам письма. Опять таки, если повезет, то они будут единичными, но, как правило, начинает приходить по 10-20 писем в день.

Защита e-mail »

Просмотров: 1127

Комментариев: 0

Про использование PHx в навигации

Как обещал раньше подробнее коснусь моментов использования встроенного расширения в ModX PHx в навигации по сайту. Но прежде чем перейти к вопросу использования PHx в навигации коснемся немного вопроса, что такое PHx вообще.

phx в навигации »

Просмотров: 665

Комментариев: 0

Прозрачность элементов средствами CSS

При верстке макета часто встречается задача сделать какой-нибудь элемент прозрачным. Если данный элемент является элементом дизайна, то png с прозрачностью является самым простым решением. Но, например, дизайнер решил немного облегчить подвал и сделать счетчики прозрачными, скажем на 50 процентов. Как быть в этой ситуации?

Прозрачность »

Просмотров: 682

Комментариев: 0

Упрощение капчи в Modx Evolution

Мы повседневно сталкиваемся с капчей, причем чем сложнее капча, тем больше усилий нам приходится прикладывать, чтобы ее преодолеть. При этом сильное усложнение капчи может вызвать у посетителя негативное впечатление от сайта в целом. Поэтому данный момент необходимо учитывать при разработке сайта, то есть должен быть баланс между сложностью ввода капчи и ее автоматическим распознаванием ботами (роботами).

Упрощение капчи »

Просмотров: 1342

Комментариев: 0

Используем спрайты и снижаем количество запросов к серверу

В ходе разработки проектов разного уровня сложности часто возникает вопрос, как сократить количество запросов к серверу и тем самым увеличить скорость загрузки сайта. Одним из способов, сократить количество запросов это использование спрайтов (sprites). Метод, при котором картинки объединяются в большую коллекцию картинок, которые потом выводятся на HTML странице отдельными картинками средствами CSS.

Спрайты »

Просмотров: 769

Комментариев: 0

Стилизация формы поиска с расположением графики внутри поля ввода

Многие дизайнеры ищут оригинальные решения, чтобы дизайн выглядел привлекательнее. Часто при отрисовке формы поиска ее управляющие элементы располагаются внутри поля ввода. Такое решение выглядит стильным и современным, однако когда встречаешься с версткой данного элемента впервые, возникает вопрос. Как разместить управление внутри поля ввода в форме поиска?

Стилизация формы поиска »

Просмотров: 861

Комментариев: 0

Чередование расположения картинок в листинге Ditto

Чтобы сделать дизайн сайта более оригинальным многие дизайнеры прибегают к разнообразию в выводе информации. На одном из проектов дизайнер решил чередовать превью (картинку к материалу) листинга справа и слева, чтобы дизайн выглядел более оригинальным и живым. Получилось действительно хорошо, но встал вопрос, как реализовать подобный функционал?

Чередование картинок »

Просмотров: 944

Комментариев: 0

Выходные фильтры

MODX — Учебное пособие по условным операторам If и PHx

В этот пост недавно было добавлено важное обновление. Пожалуйста, смотрите внизу статьи.

Если вы начали использовать MODX в его первом воплощении, Evolution, вы, вероятно, знакомы с PHx — сниппетом, который позволил вам довольно легко выполнять условные операторы в рамках PHP MODX. Когда появилась Revolution, был выпущен фрагмент If, который заменил функциональность PHx.Я не совсем уверен насчет временной шкалы, но, возможно, выходные фильтры MODX отсутствовали в самых ранних версиях …? Я сразу перешел на Revolution, в версии 2.0.0, но я не помню выходные фильтры позже. И я не думаю, что я одинок, потому что существует фрагмент If, и люди его используют. Но на самом деле для многих случаев использования — вам это не нужно! Выходные фильтры MODX Revolution дают вам силу условных операторов, встроенных прямо в ядро ​​MODX. И, как и все остальное в MODX, это очень просто!

Для чего годны условные утверждения?

Если вы читаете это, вы, вероятно, уже знаете ответ, но вот небольшой пример: вы используете один шаблон для всех своих внутренних страниц.На некоторых из этих страниц есть фотогалереи, а на некоторых нет. Вам нужно, чтобы страницы с галереями загружали разметку галереи и сценарии, поэтому условный оператор позволяет вам делать это без создания специального шаблона галереи. Это только один из многих, многих возможностей, но мы будем использовать его, чтобы проиллюстрировать, насколько легко это сделать в MODX.

Фрагменты и фильтры вывода

Фрагмент If упрощает реализацию условных операторов и, возможно, более мощный, чем фильтры вывода, но я редко сталкиваюсь с ситуацией, когда фильтры вывода не справляются со своей задачей.Это избавляет вас от установки еще одного пакета и включения еще одного сниппета, а как только вы привыкнете к синтаксису, добавлять выходные фильтры быстрее и проще, чем писать вызовы сниппетов. Итак, приступим прямо к делу! Примечание: это руководство для начинающих по MODX …

Официальная документация

В официальных документах

есть полный список доступных модификаторов для использования в ваших выходных фильтрах.

Есть несколько недостающих примеров, которые я пытался по крупицам заполнить в документации, но мы также рассмотрим некоторые из них здесь.

Пример

Допустим, у вас есть блок со всеми скриптами вашей галереи [[$ galleryScripts]] , а другой — с разметкой [[$ galleryHTML]] . В этом примере мы собираемся включить или отключить галерею (включая или не включая эти фрагменты) на основе идентификатора ресурса MODX. Скажем, например, наша страница галереи имеет идентификатор 5. Мы бы добавили это в наш шаблон страницы в элементе заголовка, где мы хотим, чтобы наши скрипты загружались:

  [[* id: is = `5`: then =` [[$ galleryScripts]] `]]
  
Разбить:
  • [[* id »Начнем с темы условного оператора.Мы хотим включить галерею на основе идентификатора, поэтому для начала используем тег MODX ID.
  • : is »isequalto, isequal, equalto, equals, is, eq — все это допустимые условные модификаторы, которые сравнивают субъект с переданным значением. В этом случае он сравнивает идентификатор ресурса со значением «5».
  • : then = `[[$ galleryScripts]]`]] »Если условие выполнено, то есть идентификатор равен« 5 », то вставляется блок [[$ galleryScripts]] . Помните, что тег фрагмента вложен внутри тега ID, поэтому вам нужно закрыть содержащий тег двойными квадратными закрывающими скобками.

Подводя итог приведенному выше коду, вы говорите MODX: «Если идентификатор ресурса документа равен 5, включите этот фрагмент». Вы должны сделать то же самое в теле шаблона страницы, чтобы включить блок [[$ galleryHTML]] . А что, если бы у вас было несколько страниц с галереей? Вы хотите, чтобы условный оператор охватывал оба экземпляра. Это делается с помощью модификатора «или», например:

  [[* id: is = `5`: or: is =` 6`: then = `[[$ galleryScripts]]`]]
  
Разбить:
  • : or: is »Это единственная новинка здесь.Добавление модификатора «: or» вызывает два модификатора «: is =` 5` «и»: is = `6`», так что, если выполняется любое из условий, выводится значение «: then =» — в данном случае наш кусок скриптов. Разве это не было просто?

Стоит отметить, что у вас может быть другой выходной фильтр внутри выводимого фрагмента. Или вы можете вывести вызов сниппета. Мне не очень повезло с вложением выходных фильтров, но я думаю, что вы должны это сделать.

OH, и самое приятное то, что (и это то, насколько мощным и гибким является MODX в целом, поэтому не удивляйтесь, узнав об этом), вы можете сделать практически все что угодно предметом выходного фильтра.Таким образом, любая настройка системы или контекста, любой доступный тег или заполнитель, даже вывод фрагмента! Несколько примеров на простом языке:

  • Если идентификатор Ultimate Parent документа (вывод через фрагмент с тем же именем) совпадает с определенным значением, отобразите это подменю. (Это может быть вызов Wayfinder или фрагмент с html-ссылками в нем.
  • Если настройка пользовательского контекста MODX [[++ site_wide_value]] совпадает с определенной строкой, то загрузите изображение логотипа, отличное от изображения в контексте по умолчанию.
  • Если заполнитель, в котором сохраняется вывод фрагмента, пуст, ничего не делать, но если он имеет значение, визуализирует вывод внутри содержащего элемента html.

Возможности безграничны, и эта функциональность встроена прямо в ядро ​​MODX. Я просто поражаюсь той мощи, которую они наделили фронтенд-разработчиками. Помните, что для этого не нужно писать ЛЮБОЙ PHP! Это абсолютный гений!

Заключение

Я надеюсь, что это руководство было полезно для некоторых людей.Если вам нужны примеры того, как формировать выходные фильтры для любого из вышеперечисленных сценариев — или любого сценария в этом отношении — просто прокомментируйте ниже, и я постараюсь ответить примером. Если у вас есть собственные варианты использования выходного фильтра ниндзя, поделитесь ими с нами 🙂 Удачного MODX-ing!

ВАЖНОЕ ОБНОВЛЕНИЕ

Это довольно старый пост, и снижение производительности при использовании условных операторов становится слишком очевидным, когда вы начинаете посещать свои сайты с большим объемом трафика. Таким образом, я постоянно использую синтаксис «Mosquito Optimization» Джейсона Кауарда уже много лет — с тех пор, как это сообщение в блоге не было опубликовано.Извините, я так медленно обновляю этот пост. Пожалуйста, прочтите эту статью.

Суть в следующем: всегда используйте условные выражения таким образом, чтобы избежать вложенных тегов. Например:

  [[* id: is = `1`: then =` [[$ chunk]] `]]
  

— это , производительность намного ниже, чем у:

  [[[[* id: is = `1`: then =` $ chunk`: else = `-`]]]]
  

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

Прочтите этот или этот пост, чтобы узнать больше советов по оптимизации MODX.

Интеграция

: modx: phx: rawurlencode [Foxy Wiki]

тип:
интеграция
система:
MODx
имя:
кодирование исходных URL-адресов PHx
описание:
Очистите ссылки «добавить в корзину» с помощью настраиваемого модификатора PHx
тег:
проверка

Обратите внимание:
Код на этой странице предоставлен членами сообщества FoxyCart и может не подтверждаться FoxyCart.com LLC в любом виде или в любой форме. Пожалуйста, дважды проверьте код перед установкой. Если вам нужна помощь, напишите на нашем форуме, но если мы не можем предложить помощь (из-за незнания этой конкретной системы или языка), мы заранее приносим извинения.

Это простой плагин PHx, который позволяет вам необработанные значения кодирования URL, которые могут быть в ваших «ссылках на добавление в корзину».

Зачем вам это

Это действительно удобно для того, чтобы убедиться, что ваши ссылки действительны HTML / XHTML, и убедиться, что нежелательные символы (например,? Или &), которые ваши клиенты могут вводить в телевизоры или объекты документа, не отправляются в FoxyCart (что может нарушить вещи).

Код

Создайте новый фрагмент с именем phx: rawurlencode и вставьте в него следующее.

  

Использование

Довольно просто. Во-первых, убедитесь, что у вас установлен и правильно настроен PHx. Затем создайте фрагмент, как указано выше.

Затем вы просто вызываете модификатор PHx клиента, где это необходимо. Если вы планировали сделать ссылку (в чанке, шаблоне или что-то еще), например:

  Обновление MODx: от эволюции к революции | Химмельбергер Дизайн 
     
      
        

Резервное копирование базы данных

Есть несколько вещей, которые изменились в схеме БД между этими двумя итерациями.Следите за таблицами в Evo, у которых есть поля, отсутствующие в схеме Revo DB. При выполнении экспорта / дампа MySQL с помощью SequelPro или аналогичного, убедитесь, что экспорт не включает операторы удаления таблиц, а экспортирует только те таблицы, без которых вы не можете жить. В приведенном ниже списке показаны таблицы, в которых все (или большинство) полей Evo используются одновременно с Revo.

  • modx_system_settings
  • modx_site_plugin_events
  • modx_active_users
  • modx_categories
  • modx_document_groups
  • modx_documentgroup_names
  • modx_member_groups
  • modx_membergroup_names
  • modx_site_htmlsnippets
  • modx_site_plugins
  • modx_site_snippets
  • modx_site_templates
  • modx_site_tmplvar_access
  • modx_site_tmplvar_contentvalues ​​
  • modx_site_tmplvar_templates
  • модx_site_tmplvars

Некоторые таблицы, такие как modx_system_settings, вероятно, не следует импортировать, кроме как вручную, только путем захвата необходимых настроек.Ниже я перечислил таблицы, которые я нашел необходимыми, и столбцы в Evo, которых нет в Revo, но, конечно, это будет отличаться от сайта к сайту.

  • modx_site_content
    1. haskeywords
    2. hasmetatags
  • modx_site_htmlsnippets
  • modx_site_plugins
  • modx_site_snippets
  • modx_site_templates
  • modx_site_tmplvar_access
  • modx_site_tmplvar_contentvalues ​​
  • modx_site_tmplvar_templates
  • modx_site_tmplvars
    1. display_params

Я пропустил несколько таблиц, которые было сложнее перенести.Примером могут служить таблицы пользователей: от Evo до Revo произошли некоторые относительно серьезные изменения схемы, связанные с пользователями. Еще одна вещь: при экспорте базы данных убедитесь, что вы используете текстовый формат, а не двоичный, так как это позволит нам управлять им с помощью редактора потоков по нашему выбору.

Преобразование синтаксиса тега

Теперь, когда мы экспортировали нашу БД, мы можем использовать редактор потока для экспортированного файла, чтобы преобразовать все наши заполнители, динамические ссылки, вызовы фрагментов и фрагментов и т. Д. Я написал несколько выражений sed, которые, кажется, помогают.Если кто-то считает, что они могут их улучшить, пожалуйста, сделайте это и позвольте мне рассказать об этом! Запустите приведенное ниже в терминале (в Linux или OSX, если вы работаете в Windows, вам не повезло. ;-)), заменив insqlfile.sql и outqlfile.sql:

sed -e 's / \ [\ ([\ * \ + ~ \!] \) / [[\ 1 / g' \
-e 's / \ [(/ [[++ / g' \
-e 's / {{/ [[$ / g' -e 's /}} /]] / g' \
-e 's / [\ + \! \ * ~)] \] /]] / g' insqlfile.sql> outqlfile.sql
 

Вы также можете редактировать свой sql-файл на месте с помощью sed, но я считаю, что лучше оставить обе версии на всякий случай.Вы можете проверить приведенные выше выражения в простом файле sql:

 [+ test_placeholder +]
[* test_TV *]
{{test_chunk}}

[! test_snippet_uncached!]
[(test_setting)]
[~ test_link ~]
 

Это НЕ преобразовывает материал PHx, вам придется сделать это вручную (см. Выходные фильтры)

Вы также можете выполнить преобразование фрагментов и плагинов в любое время. Проверьте область управления пакетами в Revo, чтобы узнать, какие пакеты будут доступны (например, Wayfinder). Этот шаг необходим, поскольку любые пользовательские фрагменты и те, которые недоступны в Revo, необходимо преобразовать в новый API (api.modx.com) или отказаться от него - возможно, в пользу альтернативы. И последнее, что следует отметить, Ditto не поддерживается в Revo ... вариант - установить getResources и преобразовать ваши вызовы Ditto (возможно, я расскажу об этом в другом посте).

Импорт базы данных

Предполагая, что у вас есть чистая установка MODx Revolution на целевом сервере, мы можем импортировать нашу БД. Первым шагом в импорте, следуя этому руководству, является добавление полей в таблицы Revo, которые присутствовали в Evo. Это позволяет нам быстро выполнять наши запросы на вставку.В приведенный выше список таблиц Evo я включил имена полей, которые нужно добавить для каждого из них.

После добавления этих дополнительных полей в таблицы Revo выполните импорт. Как только это будет завершено, удалите лишние поля, так как Revo не будет их использовать.

Незначительные корректировки

На этом этапе вам может потребоваться изменить некоторые системные настройки, такие как site_name и т. Д. Если вы еще не преобразовали необходимые пользовательские фрагменты и не установили альтернативные пакеты для несовпадающих фрагментов, сейчас самое время сделать это.Я бы рекомендовал просмотреть ваш сайт страницу за страницей и устранить любые ошибки, прежде чем называть это выполненным, но в остальном все готово!

Выпущен

MODX Evolution 1.2.1 - Трехглазая птица | Миннеаполис

Вышел новый релиз MODX Evolution. Если вы используете версию 1.2 или ниже, это обновление считается критическим из-за улучшений безопасности.

Вот некоторые основные моменты MODX Evolution 1.2.1:

  • Обновленный phpMailer, закрытие CVE-2016-10033 и CVE-2016-10045
  • Многие исправления интерфейса Менеджера и обновления значков
  • Исправить блокировку заброшенных ресурсов
  • Незначительные улучшения в теме MODXRE2
  • Исправлены проблемы с установленным PHX
  • Намного больше

Важность актуальности

Самый эффективный способ обеспечить безопасность вашего сайта MODX и его данных - это всегда использовать последнюю версию программного обеспечения MODX.Популярность и популярность MODX продолжает расти, что делает его более заметной целью для атак.

MODX обычно выпускает исправления безопасности в течение нескольких дней после сообщения о критической уязвимости. Как только они выпустят патч, вы должны убедиться, что он применяется к вашему сайту MODX. Восстановление после взлома сайта часто занимает очень много времени и может быть катастрофическим или очень дорогостоящим.

Какая версия работает на моем сайте?

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

Как мне обновить мой сайт?

Мы уже запланировали обновления для любого клиента с существующим соглашением об обслуживании. Так что, если у вас есть договор об обслуживании с нами, вам не о чем беспокоиться!

Если у вас нет договора об обслуживании с нами, это не проблема. Мы предлагаем обновления для тех, у кого нет соглашения об обслуживании, за 180 долларов. Наше обновление включает в себя полное резервное копирование базы данных и файлов и тщательную проверку, чтобы убедиться, что обновления были установлены правильно.Если во время обновления все же возникнут серьезные проблемы, мы можем вернуться к тому, что было до того, как мы начали, или полностью проработать проблемы после обсуждения с вами затрат и вариантов.

Чтобы запланировать обновление, свяжитесь с нами по адресу [email protected], и наша команда поможет вам начать! Для тех, кто хочет попробовать это самостоятельно, подробности о том, как выполнить обновление, можно найти в документации MODX.

modx - Веб-дизайн и услуги

Контент «в новостях» можно найти по идентификатору ресурса 11086 и должен содержаться в течение года публикации.Самый простой способ создать элемент «В новостях» - это продублировать существующий ресурс существующего факультета. Как только вы сделаете дублирование, снимите отметку с радио-кнопки «Опубликован», чтобы ресурс не ... Читать далее «Создание контента« в новостях »»

Комментарии

MODx не отображаются при просмотре исходного кода страницы. Это особенно полезно, когда вы пытаетесь оставить старые баннеры на главной странице, скрывая их от глаз. Чтобы использовать комментарии MODx, используйте следующий синтаксис: [[-]]

В этом руководстве описаны шаги по преобразованию расписания курса из файла Excel в MODX.Откройте исходный файл Excel (предоставленный Деборой), объедините несколько преподавателей в одну строку, затем удалите все пустые строки. Откройте файл Excel с образцом расписания курса. Скопируйте и вставьте каждый столбец, такой как Название курса, Кредит и… Продолжить чтение «Преобразование расписания курса для MODX»

Таблица преподавателей, занятых полный рабочий день, реализует одно то же, что вызывает два отдельных фрагмента. Это фрагменты: ditto.people_finder.odd.tr.2018 и ditto.people_finder.even.tr.2018 Структура обоих ditto одинакова, только цвет фона строки отличается с использованием существующих четных и нечетных классов в основном таблица стилей.При вызове этого же метода отфильтруйте результаты, используя:… Читать далее «Таблицу преподавателей, занятых полный рабочий день»

Назначение новых страниц различным разделам сайта выполняется внутри самого ресурса в разделе «Переменные шаблона». Однако добавление разделов в верхнюю панель навигации требует ручного редактирования чанков в MODX. Чтобы добавить новую программу приема в раздел приема, например, перейдите к элементам, выберите блоки, затем переход и выберите… Читать далее «Верхняя панель навигации основного сайта»

Используйте эту ссылку в качестве шаблона для создания авторов, которые не работают в качестве преподавателей GMU, но должны быть добавлены в список авторов рабочих документов факультета: https: // www.law.gmu.edu/manager/?a=resource/update&id=3329

Очистите кеш сайта и два журнала (журналы ошибок и действия диспетчера в меню «Отчеты»). Очистить разрешения и выйти из системы. Резервное копирование файлов и базы данных через cPanel. Используйте CPanel для удаления всех файлов в папке кеша (ядро / кеш). Загрузите последнюю версию MODX Revolution, распакуйте и объедините (не заменяйте) с текущей… Читать далее «Как обновить MODX Revolution»

Чтобы разместить одно объявление на главной странице Закона о масонах, используйте следующий пример: ОБЪЯВЛЕНИЯ: Информация о весенних экзаменах 2015 г. . Чтобы опубликовать несколько новостей, используйте этот пример:

Объявления:

Содержание Роли пользователей Полномочия группы Настройка разрешений для диспетчера файлов Настройка разрешений для TinyMCE Вероятно, вам потребуется предоставить разные типы доступа для разных типов пользователей.Администраторам потребуется полный доступ ко всему. Другим пользователям потребуется доступ только к определенным частям сайта, и, возможно, потребуется… Продолжить чтение «MODX: разрешения и пользователи»

Шаблоны содержимого Шаблоны переменных Фрагменты Фрагмент: «Wayfinder» - Создание меню навигации Фрагмент: «То же» - Использование данных с других страниц Фрагмент: «Панировочные сухари»: Фрагмент: «eForm» Подключаемый модуль для фрагментов: «PHx» - Расширяемый плагин заполнителей: «Страница TOC Generator »Шаблоны В интерфейсе менеджера MODx перейдите в раздел« Ресурсы »>« Управление ресурсами »>« Шаблоны », чтобы создать или изменить шаблоны.Каждая страница… Читать далее «MODX: Создание веб-сайта»

Минимальное многофункциональное портфолио WordPress с Visual Composer от FastWP

Феникс? Тема Retina Parallax WordPress - это многоцелевой шаблон, который может использоваться креативным агентством или в качестве личного портфолио для фрилансера. Это полностью адаптивный одностраничный / многостраничный шаблон, построенный на Bootstrap 3 Framework. В нем много версий вступительного раздела? полноэкранный фон, полноэкранный слайдер с параллаксом, полноэкранное видео.Он также реализовал страницу «Скоро» (с обратным отсчетом), чтобы загружать ее до тех пор, пока вы не выполните свою работу, а также страницу с ошибкой 404 и внешнюю отдельную страницу для проектов.

  • Одностраничный или многостраничный параллакс-макет
  • Минималистичный и смелый дизайн
  • Visual Composer включен
  • 3 версии домашней страницы
  • Скоро Страница с обратным отсчетом, страница ошибки 404, Страница одного проекта
  • Фильтрация портфеля изотопов
  • Анимированные счетчики
  • 100% отзывчивый
  • Чистый код
  • Bootstrap 3 Framework
  • Совместимость с браузером
  • Портфель с возможностью фильтрации
  • Портфолио AJAX
  • Видео фон Домашняя версия
  • Рабочий Контактная форма
  • 400+ Font Awesome Icons
  • Retina Ready
  • Таблицы цен
  • Шрифты Google
  • Прогресс Барс
  • Персонализированная карта Google
  • и многое другое?

История изменений

04 апреля

+ Исправлено: проблема с предварительным загрузчиком Safari
+ Исправлено: Подменю на мобильных устройствах
+ Исправлено: переполнение видео
+ Добавлено: изображение предзагрузчика и управление цветом
+ Добавлено: многостраничный демонстрационный контент
 

23 марта

+ Первоначальный выпуск
 

Deutsches Datumsformat mit PHx в MODx

von Thomas Jakobi am Montag, 5.

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

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