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