PHx

PHx Дополнительные возможности для тегов MODX Evolution

Дополнительные возможности для отображения плейсхолдеров, тегов MODx (включая TV параметры) и теги настроек сайта.

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

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

[+ucase:lcase+]

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`+]
Mem: 3.75 mb, MySQL: 0.0026 s, 2 req., PHP: 0.0436 s, all: 0.0462 s, cache.