Додаткові можливості для відображення плейсхолдерів, тегів 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`+] pre>З деякими модифіакторами цей плейсхолдер набуває певного значення. У випадку модифікатора "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`+]
- Використовувати обчислення, такі, як - * + /.
"?" символ замінюється поточним значенням розширення, але також можна використовувати вкладені теги.
[+price:math=`?*[+curs+]`+]
- Використовувати "інше значення" якщо значення placeholder або templatevar порожнє.
[*longtitle:ifempty=`[*pagetitle*]`*]
- Приймає значення, залежно від значень placeholder або templatevar.
[+placeholder:select=`0=OFF&1=ON&2=UNKNOWN`+]
- аліаси: eq
- аліаси: isnot, isnt
- аліаси: isgt
- аліаси: islt
lt - менше (<)
- аліаси: isinrole, ir, memberof
Приймає як параметр розділений комами список веб-груп і повертає значення true/false залежно від того, чи належить поточний користувач до будь-якої з цих груп чи ні (замінює собою модифікатор "inrole" , який необхідно було поєднувати з умовним оператором).
[+phx:mo=`Адміністратори`:then=`Я адмін`:else=`Я простий смертний`+]
- Приймає як параметр змінну для порівняння. Також може бути використане у поєднанні з :or
або :and
.
[+phx:if=`[+price+]`:gt=`0`:then=`Ціна: [+price+]`+]
- Логічне АБО (перевіряється, чи вірна перша чи друга умова).
[+phx:if=`[*id*]`:is=`2`:or:is=`3`:then=`{{Chunk}}`:else =`{{OtherChunk}}`+]
- Логічне І (перевіряється, чи правильні обидві умови).
[+phx:if=`[!UltimateParent!]`:is=`1`:and:isnot=`[*id*]`:then=`{{ChildChunk} }`:else=`{{ParentChunk}}`+]
- Значення template відображається, коли всі умови правильні. Тут можна вказати виклик {{чанка}}
, [[сніппета]]
або чистий HTML.
- Значення template відображається, коли всі умови не правильні. Тут можна вказати виклик {{чанка}}
, [[сніппета]]
або чистий HTML.
- Використовується подібно до 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`+]