Привет, друзья! Я всегда уделяю мелочам особое внимание, поскольку считаю, что если вы делаете сайт, то должны отточить все его моменты.
Например, в MODX Revolution существуют так называемые TV-поля, поэтому на примере простого поля «цены» давайте рассмотрим способы его вывода.
Начинающий пользователь (а может, и не только начинающий) сделает вывод поля таким образом:
Цена: [[*price]]
Где «price» – соответственно идентификатор (имя) поля.
На что здесь стоит обратить внимание? На то, что если поле не обязательное и не заполнено, то вы получите нечто следующее:
Цена:
Что, по идее, является некой ошибкой. Покажу, как это можно исправить.
Если вы хотите выводить поле только в том случае, когда оно заполнено – первый вариант кода вы заменяете на:
[[*price:!empty=`Цена: [[*price]]`]]
Все названия вы заменяете на свои соответственно.
Если вы хотите вывести сообщение о том, что цена (или другая информация о ресурсе отсутствует), то добавьте следующий код в шаблон вашего сайта:
Организация структуры MODx Revo, работа с чанками и TV полями
[[*price:empty=`Цена не указана!`]]
Где «price» – соответственно имя поля.
При использовании двух последних конструкций вместе, то есть:
[[*price:!empty=`Цена: [[*price]]`]] [[*price:empty=`Цена не указана!`]]
информация из поля будет выводиться вместе с сопутствующим текстом или же просто будет выводиться сообщение об отсутствии должной информации.
Помимо этого, есть еще два варианта совмещенного вывода необходимой информации.
Первый — это:
[[*price:is=«:then=`Цена не указана!`:else=`Цена: [[*price]]`]]
[[If? operator=`notempty` else=`Цена не указана!`]]
Какой из перечисленных способов использовать — решать вам.
Источник: www.pandoge.com
Tv множественный список modx
Ресурс в modx это объект, содержащий стандартный набор полей, который может быть расширен за счёт TV-параметров. Отличительной особенностью ресурса является наличие уникального URL адреса по которому к нему можно обратиться.
Так как modx является фреймворком в оболочке движка, с ресурсами можно работать как через панель администрирования, так и посредством API (xPDO). API код в modx может выполняться в сниппетах, плагинах и даже PHP файлах, если предварительно в них подключить modx класс. Я же рекомендую начать изучение с выполнения команд через «Console». Этот компонент позволяет выполнять код не создавая сниппетов и плагинов. После его установки во вкладке «Приложения» появляется ссылка на редактор кода.
Получение значения полей конкретного ресурса
Для того чтобы получить доступ к полям ресурса необходимо его выбрать из всего множества. Лучше осуществлять отбор по идентификатору, так как он уникален.
modx tv
$res = $modx->getObject(‘modResource’,1); echo $res->get(‘pagetitle’); return;
Если код запускается не из консоли, а непосредственно при доступе к ресурсу, то можно узнать значения его полей не указывая идентификатор.
$modx->resource->get(‘pagetitle’); $modx->resource->get(‘content’); //или $modx->resource->getContent();
Пример получения TV-переменных.
//текущего ресурса по id $modx->resource->getTVValue(3); //по названию TV-параметра $modx->resource->getTVValue(‘img-news’); //получение значения конкретного ресурса $res = $modx->getObject(‘modResource’,1); echo $res->getTVValue(‘img-news’); return;
Изменение значения полей в modx
С получением значений полей разобрались, теперь давайте разберемся как их изменить.
$res = $modx->getObject(‘modResource’,5); $res->set(‘content’, ‘Изменили содрежимое’); $res->setTVValue(‘img-news’,’test.png’); $res->save();
Особенностью является то, что сначала мы производим действия над полями и только затем сохраняем изменения.
Выборка и обработка множества ресурсов
Modx revolution настолько гибок, что позволяет обрабатывать целые коллекции ресурсов, выбранных по определенным критериям.
Для примера давайте выберем все ресурсы родителя с идентификатором 26, опубликованные, не удалённые и доступные для поиска. Заменим у них в тексте все одинарные кавычки на двойные.
if(!$docs = $modx->getCollection(‘modResource’, array( ‘parent’ => 26, ‘published’ => 1, ‘deleted’ => 0, ‘searchable’ => 1 ))) foreach($docs as $doc)< $content = $doc->get(‘content’); $content = str_replace(»’,'»‘,$content); $doc->set(‘content’,$content); $doc->save(); >
Практически любые поля могут участвовать в выборке. Все их можно посмотреть выполнив следующий код через консоль.
$res = $modx->getObject(‘modResource’,1); print(»); print_r($res->toArray()); print(»); return;
Нахождение связанных объектов
В modx все построено на объектах. Ими являются ресурсы, пользователи, чанки, TV-параметры. И всё это между собой связано.
Получая в качестве объекта ресурс, мы можем найти связанный с ним чанк или родителя и работать уже с ним опять как с объектом. Есть два способа получения связанных объектов:
- getOne() — получение единичного связанного объекта;
- getMany() — получение массива связанных объектов одного типа;
Разница в том, что у объекта могут быть связи с другими объектами множественные и одинарные. Например, у ресурса может быть несколько TV-параметров, чтобы получить их все (в массив) необходимо использовать метод getMany(), а вот родитель может быть только один, поэтому для его получения используется getOne().
//получение родителя как объекта $parent = $resource->getOne(‘parent’); //если нужен только id $id = $resource->get(‘parent’);
Создание ресурса из сниппета
API modx позволяет программно создавать новые ресурсы. Для этого достаточно запустить стандартный процессор (функцию). В качестве параметров передаём любые значения полей создаваемого ресурса.
$response = $modx->runProcessor(‘resource/create’, array( ‘pagetitle’ => ‘Тестовая страница’, ‘longtitle’ => », ‘description’ => », ‘introtext’ => », ‘content’ => ‘Содержимое тестовой страницы’, ‘alias’ => ‘new-page’, ‘template’ => 1, ‘published’ => 1, ‘parent’ => 0 )); if ($response->isError()) < return $modx->error->failure($response->getMessage()); > //получаем в качестве объекта вновь созданную страницу $newResource = $response->response[‘object’];
Если требуется заполнить TV-поля, то процессору дополнительно передаются параметры вида tv1 = ‘значение’, где 1 — это идентификатор TV-поля.
Источник: proweb63.ru
Модификаторы modx
Модификаторы modx — или как выводить то что нам нужно.
28325 20 August 2016 1 modx revo, документация
Небольшая табличка с модификаторами
Модификаторы условия
if,input | if — задает дополнительное условие input — добавляет в тег обратываемые данные |
[[*id:input=`текст`]] — вместо id выведет «текст» . [[*id:is=`1`:and:if=`[[*id]]`:ne=`2`:then=`ок`:else=`не ок`]] — если id-ресурса = 1 и не равно 2, выводим «ок», или же «не ок» |
or,and | or — условие «ИЛИ» and — условие «И» |
[[*id:is=`1`:or:if=`[[*id]]`:is=`2`:then=`ок`:else=`не ок`]] — если id-ресурса = 1 или = 2, выводим «ок», или же «не ок» |
isequalto, isequal, equalto, equals, is, eq | Если тег равен модификатору, используется с «then» и «else.» | [[*id:is=`1`:then=`ок`:else=`не ок`]] — если id-ресурса = 1, выводим «ок», или же «не ок» |
notequalto, notequals, isnt, isnot, neq, ne | Если тег не равен модификатору, используется с «then» и «else». | [[*id:ne=`1`:then=`ок`:else=`не ок`]] — если id-ресурса не равно 1, выводим «ок», или же «не ок» |
greaterthanorequalto, equalorgreaterthen, ge, eg, isgte, gte | Если тег больше или равен модификатору, используется с «then» и «else». | [[*id:ge=`1`:then=`ок`:else=`не ок`]] — если id-ресурса больше или равен 1, выводим «ок», или же «не ок» |
isgreaterthan, greaterthan, isgt, gt | Если тег больше модификатора, используется с «then» и «else». | [[*id:gt=`1`:then=`ок`:else=`не ок`]] — если id-ресурса больше 1, выводим «ок», или же «не ок» |
equaltoorlessthan, lessthanorequalto, el, le, islte, lte | Если тег меньше или равен модификатору, используется с «then» и «else». | [[*id:el=`10`:then=`ок`:else=`не ок`]] — если id-ресурса меньше или равно 10, выводим «ок», или же «не ок» |
islowerthan, islessthan, lowerthan, lessthan, islt, lt | Если тег меньше модификатора, используется с «then» и «else». | [[*id:lt=`10`:then=`ок`:else=`не ок`]] — если id-ресурса меньше 10, выводим «ок», или же «не ок» |
hide | Если предыдущий модификатор возвращает положительное значение («then»), то не выводим обработанный тег. | [[*id:is=`10`:hide]] — если id-ресурса = 10, ничего не выводим |
show | Если предыдущий модификатор возвращает положительное значение («then»), то выводим обработанный тег. | [[*id:is=`10`:show]] — если id-ресурса = 10, выводим. |
then | Условие, если тег соответствует модификатору, выводим сообщение, иначе ничего не выводим | [[*id:is=`10`:then=`Джузеппе`]] — если id-ресурса = 10, выводим «Джузеппе». |
else | Условие, если тег не соответствует модификатору, выводим сообщение. Используется только в связке с «then» | [[*id:is=`10`:then=`ок`:else=`не ок`]] — если id-ресурса = 10, выводим «ок» иначе «не ок». |
Модификаторы строк
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=`5`]] |
limit | Устанавливает лимит на длинну строки и обрезает ее. | [[*pagetitle:limit=`30`]] |
ellipsis | Устанавливает лимит на длинну строки и обрезает ее, добавляя три точки в конце | [[*pagetitle:ellipsis=`30`]] |
tag | Вернет, запись тега. | [[*pagetitle:limit=`10`:tag]]вернет: [[*pagetitle:limit=`10`:tag]] |
add, increment, incr | Вернет, значение + модификатор ( по умолчанию +1 ). | [[+num:incr]] или [[+num:add=`5`]] |
subtract, decrement, decr | Вернет, значение — модификатор ( по умолчанию -1 ). | [[+num:decr]] или [[+num:decr=`5`]] |
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 | Вернет строку с « » или « » вставленные перед всеми (rn, nr, n и r). аналогично функции php nl2br |
[[*pagetitle:nl2br]] |
date | Аналогично функции PHP strftime. | [[+birthyear:date=`%Y`]] |
strtotime | Аналогично функции PHP strtotime. Вернет дату. | [[*createdon:strtotime]] |
fuzzydate | Вернет дату. «вчера», «сегодня». | [[*createdon:fuzzydate]] |
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]]. |
Источник: pitrooo.ru