Фильтры, они же модификаторы, в CMF MODx Revolution. Фильтры modx revo
ARTEMBLOG :: MODx Revo - фильтры ввода-вывода
Фильтры в революции позволяют управлять способом представления данных. Они позволяют изменять значения внутри шаблонов.
В революции выходной фильтр применяется один или более раз из серии выходных модификаторов, которые ведут себя подобно PHx вызывам в MODx Evolution - за исключением, что они встроены в ядро. Синтаксис выглядит следующим образом:
[ [element:modifier=`value`] ]Они также могут быть соединены (выполняется слева направо):
[ [element:modifier:anothermodifier=`value`:andanothermodifier:yetanother=`value2`] ]Вы также можете использовать их, чтобы изменить выход сниппета; внимание, модификатор идет после имени сниппета и перед вопросительным знаком, например,
[ [mySnippet:modifier=`value`? &mySnippetParam=`something`] ]В следующей таблице перечислены некоторые из существующих модификаторов и приведены примеры их использования. Хотя приведенные ниже примеры являются для некоторых тегов, выходные модификаторы могут быть использованы с любым тегом MODx. Убедитесь, что модификатор получает данные.
Условные модификаторы:
Модификатор |
Описание |
Пример |
if, input |
||
or |
Логическое ИЛИ |
[ [+numbooks:is=`5`:or:is=`6`:then=`There are 5 or 6 books!`:else=`Not sure how many books`] ] |
and |
Логическое И |
|
isequalto, isequal, equalto, equals, is, eq |
Равно |
[ [+numbooks:isequalto=`5`:then=`There are 5 books!`:else=`Not sure how many books`] ] |
notequalto, notequals, isnt, isnot, neq, ne |
Не равно |
[ [+numbooks:notequalto=`5`:then=`Not sure how many books`:else=`There are 5 books!`] ] |
greaterthanorequalto, equalorgreaterthen, ge, eg, isgte, gte |
Больше или равно |
[ [+numbooks:gte=`5`:then=`There are 5 books or more than 5 books`:else=`There are less than 5 books`] ] |
isgreaterthan, greaterthan, isgt, gt |
Больше |
[ [+numbooks:gt=`5`:then=`There are more than 5 books`:else=`There are less than 5 books`] ] |
equaltoorlessthan, lessthanorequalto, el, le, islte, lte |
Меньше или равно |
[ [+numbooks:lte=`5`:then=`There are 5 or less than 5 books`:else=`There are more than 5 books`] ] |
islowerthan, islessthan, lowerthan, lessthan, islt, lt |
Меньше |
[ [+numbooks:lt=`5`:then=`There are less than 5 books`:else=`There are more than 5 books`] ] |
hide |
Скрытие |
[ [+numbooks:lt=`1`:hide] ] |
show |
Показ |
[ [+numbooks:gt=`0`:show] ] |
then |
Тогда |
[ [+numbooks:gt=`0`:then=`Now available!`] ] |
else |
Или |
[ [+numbooks:gt=`0`:then=`Now available!`:else=`Sorry, currently sold out.`] ] |
select |
||
memberof, ismember, mo |
Член |
[ [+modx.user.id:memberof=`Administrator`] ] |
Строковые модификаторы:
Модификатор |
Описание |
Пример |
cat |
Если не пусто |
[ [+numbooks:cat=` books`] ] |
lcase, lowercase, strtolower |
Транформация в малые буквы |
[ [+title:lcase] ] |
ucase, uppercase, strtoupper |
Трансформация в большие буквы |
[ [+headline:ucase] ] |
ucwords |
Первая буква слова заглавная |
[ [+title:ucwords] ] |
ucfirst |
Первая буква заглавная |
[ [+name:ucfirst] ] |
htmlent, htmlentities |
Замена тегов HTML |
[ [+email:htmlent] ] |
esc,escape |
Безопасно убирает символы |
[ [+email:escape] ] |
strip |
Замена перевода каретки, табуляции и множества пробелов на один пробел |
[ [+textdocument:strip] ] |
stripString |
Удаляет значение из строки |
[ [+name:stripString=`Mr.`] ] |
replace |
Замена значения |
[ [+pagetitle:replace=`Mr.==Mrs.`] ] |
striptags, stripTags,notags,strip_tags |
Убирает HTML теги |
[ [+code:strip_tags=`</p> <p>`] ] |
len,length, strlen |
Длина строки |
[ [+longstring:strlen] ] |
reverse, strrev |
Реверс строки |
[ [+mirrortext:reverse] ] |
wordwrap |
Новая строка после указанного количества символов |
[ [+bodytext:wordwrap=`80`] ] |
wordwrapcut |
Вставляет символ новой строки после определенного количества символов. |
[ [+bodytext:wordwrapcut=`80`] ] |
limit |
Выводимое кол-во символов |
[ [+description:limit=`50`] ] |
ellipsis |
Обрезание строки после указанного кол-ва символов |
[ [+description:ellipsis=`50`] ] |
tag |
Отображает сырой элемент без: тега. Полезно для документации. |
[ [+showThis:tag] ] |
Если значение может изменяться динамически, то его следует сделать некэшированным. Например:
[ [+placeholder:default=`A default value!`] ]Это означает, что значение может иногда быть пустым, а иногда нет. Зачем его хранить в кэше? Это может исключить то, что значение может появиться.
Если вы не уверены будет ли результат при выполнении сниппета, то логично сделать значение по умолчанию:
[ [!getResources:default=`Sorry - nothing matched your search.`? &tplFirst=`blogTpl` &parents=`2,3,4,8` &tvFilters=`blog_tags==%%` &includeTVs=`1`] ]artemblog.ru
Фильтры или модификаторы в CMF MODx Revolution, примеры применения
19 октября 2011 г.
В этой статье Я бы хотел рассказать Вам о фильтрах (модификаторах) в MODx.
В принципе, можно жить и без них, но, зная как и где они применяются, разработчик получает мощный инструмент, с помощью которого можно добавлять небольшую, но, порой, очень полезную логику на Ваш сайт.
В этой статье Я буду говорить про MODx Revolution. Возможность применять фильтры существует благодаря сниппету PHx, который по умолчанию уже встроен в ядро MODx Revolution, в ядре же Evolution PHx отсутствует, поэтому на Evo его необходимо устанавливать отдельно.
Синтаксис фильтров выглядит следующим образом:
[[element:modifier=`value`]]
Очень удобно то, что их можно выстраивать в цепочки:
[[element:modifier:anothermodifier=`value`:andanothermodifier:yetanother=`value2`]]
При этом, передавать параметры в сниппеты также возможно. Главное, чтобы фильтр прописывался между названием сниппета и вопросительным знаком:
[[mySnippet:modifier=`value`? &mySnippetParam=`something`]]
В следующей таблице перечислены некоторые фильтры и на примере показано их применение. Хоть в примерах и использован плейсхолдер, но фильтры могут применяться к любому тэгу MODx'а. Убедитесь в том, что плейсхолдер действительно что-либо возвращает.
Условные модификаторы
or | Может использоваться со строковыми модификаторами для организации отношения логического "И" | |
and | Может использоваться со строковыми модификаторами для организации отношения логического "ИЛИ" | |
isequalto, isequal, equalto, equals, is, eq | Сравнивает вывод с заданным значением и в случае совпадения продолжает парсинг тэга. Используется совместно с "then" и "else" | [[+numbooks:isequalto=`5`:then=`There are 5 books!`:else=`Not sure how many books`]] |
notequalto, notequals, isnt, isnot, neq, ne | Сравнивает вывод с заданным значением и в случае не совпадения продолжает парсинг тэга. Используется совместно с "then" и "else" | [[+numbooks:notequalto=`5`:then=`Not sure how many books`:else=`There are 5 books!`]] |
greaterthanorequalto, equalorgreaterthen, ge, eg, isgte, gte | Сравнивает вывод с заданным значением и в случае если вывод больше либо равен переданному значению продолжает парсинг тэга. Используется совместно с "then" и "else" | [[+numbooks:gte=`5`:then=`There are 5 books or more than 5 books`:else=`There are less than 5 books`]] |
isgreaterthan, greaterthan, isgt, gt | Сравнивает вывод с заданным значением. Если вывод больше -продолжает парсинг. Используется с "then" и "else" | [[+numbooks:gt=`5`:then=`There are more than 5 books`:else=`There are less than 5 books`]] |
equaltoorlessthan, lessthanorequalto, el, le, islte, lte | Сравнивает вывод с заданным значением и в случае если вывод меньше либо равен переданному значению продолжает парсинг тэга. Используется совместно с "then" и "else" | [[+numbooks:lte=`5`:then=`There are 5 or less than 5 books`:else=`There are more than 5 books`]] |
islowerthan, islessthan, lowerthan, lessthan, islt, lt | Сравнивает вывод с заданным значением. Если вывод меньше -продолжает парсинг. Используется с "then" и "else" | [[+numbooks:lte=`5`:then=`Менее 5 книг`:else=`Более 5 книг`]] |
hide | Проверяет предшествующие условия. Если они были истинными - скрывает элемент. | [[+numbooks:lt=`1`:hide]] |
show | Проверяет предшествующие условия. Если они были истинными - отображает элемент. | [[+numbooks:gt=`0`:show]] |
then | Используется как следствие какого-либо условия | [[+numbooks:gt=`0`:then=`Now available!`]] |
else | Используется как следствие какого-либо условия. Применяется совместно с "then" | [[+numbooks:gt=`0`:then=`Now available!`:else=`Sorry, currently sold out.`]] |
memberof, ismember, mo | Возвращает результат проверки на принадлежность пользователя заданной группе. | [[+modx.user.id:memberof=`Administrator`]] |
Строковые модификаторы
cat | Добавляет к выводу указанную строку, если вывод не пустой. | [[+numbooks:cat=` books`]] |
lcase, lowercase, strtolower | Переводит все символы строки в нижний регистр. Идентично функции PHP strtolower | [[+title:lcase]] |
ucase, uppercase, strtoupper | Переводит все символы строки в верхний регистр. Идентично функции PHP strtoupper | [[+headline:ucase]] |
ucwords | Переводит первые буквы всех слов в строке в верхний регистр. Идентично функции PHP ucwords | [[+title:ucwords]] |
ucfirst | Переводит первую букву строки в верхний регистр. Идентично функции PHP ucfirst | [[+name:ucfirst]] |
htmlent, htmlentities | Идентично функции PHP htmlentities. Использует текущее значение системного параметра "modx_charset" с флагом ENT_QUOTES | [[+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 | Удаляет все PHP и HTML тэги за исключением указанного. Идентично функции PHP strip_tags | [[+code:strip_tags=`<p>`]] |
len,length, strlen | Выводит длину строки. Идентично функции PHP strlen | [[+longstring:strlen]] |
reverse, strrev | Идентично функции PHP strrev | [[+mirrortext:reverse]] |
wordwrap | Идентично функции PHP wordwrap. Принимает оптимальное значение для установки позиции переноса слов. | [[+bodytext:wordwrap=`80`]] |
wordwrapcut | Идентично функции PHP wordwrap с разрывом слов. Принимает оптимальное значение для установки позиции переноса слов. | [[+bodytext:wordwrapcut=`80`]] |
limit | Ограничивает (обрезает) длину строки в заданное количество символов. По умолчанию ограничение длины составляет 100 символов. | [[+description:limit=`50`]] |
ellipsis | Обрезает строку до заданного количества символов и добавялет многоточие. По умолчанию ограничение составляет 100 символов. | [[+description:ellipsis=`50`]] |
tag | Отображает вызываемый элемент без :tag. Полезно для документации, например, как у меня =) | [[+showThis]] |
math | Возвращает результат вычислений (не рекомендуется т.к. создает нагрузку на процессор) | |
add,increment,incr | Возвращает значение наращенное на заданную величину (по умолчанию на единицу) | [[+downloads:incr]] [[+blackjack:add=`21`]] |
subtract,decrement,decr | Декрементирует из значения заданную величину (по умолчанию: -1) | [[+countdown:decr]] [[+moneys:subtract=`100`]] |
multiply,mpy | Возвращает результат умножения на число (по умолчанию: *2) | [[+trifecta:mpy=`3`]] |
divide,div | Возвращает результат деления на число (умолчание: /2) Не допускается 0. | [[+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 | Идентично функции PHP nl2br. Все переносы строк заменяет на <br> | [[+textfile:nl2br]] |
date | Идентично функции PHP strftime. Формат передается в качестве значения. См. Date Formats. | [[+birthyear:date=`%Y`]] |
strtotime | Идентично функции PHP strtotime. Применимо только к датам. См Date Formats. | [[+thetime:strtotime]] |
fuzzydate | Возвращает дату в формате "сегодня в 13:40", "вчера в 18:40". | [[+publishedon:fuzzydate]] |
ago | Возвращает количество секунд, минут, часов, недель и т.д от даты до текущего момента. Применимо только к датам | [[+createdon:ago]] |
md5 | Идентично функции PHP md5. | [[+password:md5]] |
cdata | Заключает строку в тэги CDATA. | [[+content:cdata]] |
userinfo | Возвращает запрашиваемы пользовательские данные. Применимо к ID пользователя в MODx. В модификатор передается поле, которое необходимо возвратить. | [[+modx.user.id:userinfo=`username`]] |
isloggedin | Возвращает "true" если пользователь авторизован в данном контексте. | [[+modx.user.id:isloggedin]] |
isnotloggedin | Возвращает "true" если пользователь авторизован в данном контексте | [[+modx.user.id:isnotloggedin]] |
urlencode | Идентично функции PHP urlencode | [[+mystring:urlencode]] |
urldecode | Идентично функции PHP urldecode | [[+myparam:urldecode]] |
Создание пользовательский модификаторов
Сниппеты могут использоваться в качестве модификаторов. Для этого просто вместо название фильтра следует вписать имя сниппета. Например, у нас есть сниппет с названием "makeDownloadLink"
[[+file:makeDownloadLink=`notitle`]]
Этот вызов передаст в сниппет следующие параметры:
input | Значение вывода. | Значение, которое передает |
options | Любое значение переданное в модификатор. | 'notitle' |
token | Тип элемента, к которому применяется модификатор. | + (токен перед `file`) |
name | Имя, к которому применяется модификатор. | file |
tag | Строка вызова | [[+file:makeDownloadLink=`notitle`]] |
Результатом будет являться то, что будет возвращать сниппет.
Примеры использования
Здесь приведен пример, когда фильтры вызываются друг за другом. Данный пример форматирует дату из строки в другой формат:
[[+mydate:strtotime:date=`%Y-%m-%d`]]
Прямой доступ к таблице modx_user_attributes из базы данных из сниппета может быть заменен на простое использование модификатора userinfo. Для получения нужного поля, необходимо в параметры модификатора передать название столбца из БД.
Внутренний ключ: [[!+modx.user.id:userinfo=`internalKey`]]<br>Имя пользователя: [[!+modx.user.id:userinfo=`username`]]<br>Полное имя: [[!+modx.user.id:userinfo=`fullname`]]<br>Роль: [[!+modx.user.id:userinfo=`role`]]<br>E-mail: [[!+modx.user.id:userinfo=`email`]]<br>Телефон: [[!+modx.user.id:userinfo=`phone`]]<br>Мобильный: [[!+modx.user.id:userinfo=`mobilephone`]]<br>Факс: [[!+modx.user.id:userinfo=`fax`]]<br>Дата рождения: [[!+modx.user.id:userinfo=`dob`:date=`%Y-%m-%d`]]<br>Пол: [[!+modx.user.id:userinfo=`gender`]]<br>Страна: [[+modx.user.id:userinfo=`country`]]<br>Область: [[+modx.user.id:userinfo=`state`]]<br>Почтовый индекс: [[+modx.user.id:userinfo=`zip`]]<br>Аватарка: [[+modx.user.id:userinfo=`photo`]]<br>Комментарий: [[+modx.user.id:userinfo=`comment`]]<br>Пароль: [[+modx.user.id:userinfo=`password`]]<br>Кэш пароля: [[+modx.user.id:userinfo=`cachepwd`]]<br>Дата последнего логина: [[+modx.user.id:userinfo=`lastlogin`:date=`%Y-%m-%d`]]<br>Дата текущего логина:[[+modx.user.id:userinfo=`thislogin`:date=`%Y-%m-%d`]]<br>Число входов: [[+modx.user.id:userinfo=`logincount`]]
[[!+modx.user.id]] по умолчанию принимает значение ID текущего пользователя. Вы можете заменить элемент на [[*createdby]] или любой другой элемент или плейсхолдер, который возвращает ID в виде числа.
Вот, вкратце о модификаторах (фильтрах), которые могут быть полезны при создании сайта на MODx Revolution. Впрочем данный материал также применим и для Evolution.
Буду рад если статья будет кому-то полезна. Если где-то заметите ошибку - дайте мне знать =)
Материал взят отсюда
Автор: Артур Минимулин ⚫ 19 октября 2011 г. ⚫ Тэги:artur.minimulin.ru
Модификатор |
Описание |
Пример |
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 ). |
0или [ [+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 |
Фильтры phx в modx revo[ [*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]]. |
freelgraf.in.ua
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]]. |
sergst88modx.blogspot.com
продвинутое портфолио с фильтром по категориям
В данном уроке я хочу рассказать о том как организовать продвинутое портфолио с фильтром по категориями. Выглядит оно так:
При наведении на картинку будет выводится кнопка для увеличения изображения, заголовок и описание см. картинку выше.
Во многих современных шаблонах встречается такое портфолио, всю его разметку и стили выкладывать не буду, моя задача показать как это все натягивается на модх.
И так разметка переключателей категорий такого портфолио выглядит так:
<ul> <li><a data-filter="*" href="#">Все</a></li> <li><a data-filter=".websites" href="#">Сайты</a></li> <li><a data-filter=".social-networks" href="#">Социальные сети</a></li> <li><a data-filter=".form-style" href="#">Лого, Фирменный стиль и т.п.</a></li> </ul>
<ul> <li><a data-filter="*" href="#">Все</a></li> <li><a data-filter=".websites" href="#">Сайты</a></li> <li><a data-filter=".social-networks" href="#">Социальные сети</a></li> <li><a data-filter=".form-style" href="#">Лого, Фирменный стиль и т.п.</a></li> </ul> |
Вся логика заключается в том что все сортируется по css классам, например вот эта строчка:
<li class=»filter»><a data-filter=».websites» href=»#»>Сайты</a></li> здесь «Сайты» это ссылка на все элементы с классом websites.
Разметка отдельного элемента портфолио выглядит так:
<div><!-- item --> <div> <figure> <span> <span></span> <span> <!-- lightbox --> <a href="путь/название-картинки.jpg" data-plugin-options='{"type":"image"}'> <span></span> </a> </span> <!-- overlay title --> <div> <h4>Заголовок</h4> <ul> <li><a href="#">Описание</a></li> </ul> </div><!-- /overlay title --> </span> <img src="путь/название-картинки.jpg" alt=""> </figure> </div> </div><!-- /item -->
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <div><!-- item --> <div> <figure> <span> <span></span> <span> <!-- lightbox --> <a href="путь/название-картинки.jpg" data-plugin-options='{"type":"image"}'> <span></span> </a> </span> <!-- overlay title --> <div> <h4>Заголовок</h4> <ul> <li><a href="#">Описание</a></li> </ul> </div><!-- /overlay title --> </span> <img src="путь/название-картинки.jpg" alt=""> </figure> </div> </div><!-- /item --> |
Если вы заметили, то вверху блока обвертки элемента портфолио как раз присутствует класс websites о котором я сказал выше.
Ну а теперь самое главное.
Реализация (натяжка) портфолио с категориями на MODX при помощи компонента Gallery.
Идем в Приложения — Gallery — Создать альбом — создаем и сохраняем альбом
Теперь отредактируем данный альбом
И загрузим в него все наши фото:
Теперь редактируем все фото в альбоме, заполняем им имя, описание и самое главное заполняем поле Метки, именно по нему будет происходить сортировка.
Итак все подготовили, теперь на основе выше приведенной разметки создадим чанк tpl-portfolio-gallery для обвертки каждого изображения:
<div><!-- item --> <div> <figure> <span> <span></span> <span> <!-- lightbox --> <a href="[[+image_absolute]]" data-plugin-options='{"type":"image"}'> <span></span> </a> </span> <!-- overlay title --> <div> <h4>[[+name]]</h4> <ul> <li><a href="#">[[+description]]</a></li> </ul> </div><!-- /overlay title --> </span> <img src="[[+image_absolute]]" alt="[[+name]]"> </figure> </div> </div><!-- /item -->
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <div><!-- item --> <div> <figure> <span> <span></span> <span> <!-- lightbox --> <a href="[[+image_absolute]]" data-plugin-options='{"type":"image"}'> <span></span> </a> </span> <!-- overlay title --> <div> <h4>[[+name]]</h4> <ul> <li><a href="#">[[+description]]</a></li> </ul> </div><!-- /overlay title --> </span> <img src="[[+image_absolute]]" alt="[[+name]]"> </figure> </div> </div><!-- /item --> |
Здесь по сути не чего сложного, просто мы заменили все то что меняется на теги вывода Gallery, здесь
- [[+tags]] — Выводит Метку
- [[+image_absolute]] — выводит изображение из альбома
- [[+name]] — выводит заголовок
- И [[+description]] — выводит описание
Теперь остается вывести саму галерею. делается это очень просто:
[[Gallery? &album=`1` &thumbTpl=`tpl-portfolio-gallery`]]
[[Gallery? &album=`1` &thumbTpl=`tpl-portfolio-gallery`]] |
Выводим альбом с ID 1, и для оформления изображений используем чанк tpl-portfolio-gallery
В конечном итоге получаем следующее:
<ul> <li><a data-filter="*" href="#">Все</a></li> <li><a data-filter=".websites" href="#">Сайты</a></li> <li><a data-filter=".social-networks" href="#">Социальные сети</a></li> <li><a data-filter=".form-style" href="#">Фирменный стиль</a></li> </ul> <div> [[Gallery? &album=`1` &thumbTpl=`tpl-portfolio-gallery`]] </div>
<ul> <li><a data-filter="*" href="#">Все</a></li> <li><a data-filter=".websites" href="#">Сайты</a></li> <li><a data-filter=".social-networks" href="#">Социальные сети</a></li> <li><a data-filter=".form-style" href="#">Фирменный стиль</a></li> </ul>
<div> [[Gallery? &album=`1` &thumbTpl=`tpl-portfolio-gallery`]] </div> |
Это все я ввел в содержимом при редактировании документа (предварительно отключив редактор текста).
Можете взглянуть на работу этого портфолио здесь: alex87.ru/portfolio
В следующем уроке мы разберем создание точно такого же портфолио, но с сылкой на страницу с его кейсом (или подробным описанием). Собираться оно будет из отдельных страниц, с TV полем Изображение и выводится при помощи PdoPage.
web-revenue.ru
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]]. |
urlencode | Аналогично функции php urlencode. | [[+stringi:urlencode]]. |
urldecode | Аналогично функции php urldecode. | [[+stringi:urldecode]]. |
modxcmf.blogspot.com