Я пытаюсь проверить дату и время сервера, чтобы сравнить их с датой ТВ ресурса, но я всегда получаю пустую страницу, когда я пытаюсь проверить в IF отчетности, вот что мне нужно.
У меня есть такой фрагмент
setTimezone($tz_object); return $datetime->format(‘Y-m-d h:i:s’); > $currentDate = getDatetimeNow(); $dtA = new DateTime($currentDate); $dtB = new DateTime($date); if ( $dtA > $dtB ) < $active = 0; return $active; >else
Но когда на странице, если я пытаюсь так
[[!CheckCurrentDate? #128578;
Решение
измените ваш оператор на не равный, а ваш операнд на 1 — телевизоры modx на самом деле не существуют, если они не заполнены [даже если они определены по умолчанию], вы можете получить нулевое значение или ошибку в вашем фрагменте, если телевизор не заполнен ,
повторить ваше возвращаемое значение,
if ( $dtA > $dtB ) < $active = 0; >else < $active = 1; >echo $active; return;
Если у вас возникли проблемы с интерпретацией возвращаемых значений как булевых или строк?
Yamaha MODX Synthesizer REVIEW + Sound Demo & Sound Design Tutorial
Вы также можете изменить свой фрагмент, чтобы получить текущее значение ресурса DatumIsteka, а затем использовать модификаторы вывода .
или что-то вроде этого:
setTimezone($tz_object); return $datetime->format(‘Y-m-d h:i:s’); > $currentDate = getDatetimeNow(); $dtA = new DateTime($currentDate); $date = $modx->resource->getTVValue(‘DatumIsteka’); $dtB = new DateTime($date); if ( $dtA > $dtB ) < $active = $modx->getChunk(‘chunkName’); // chunkName = $(«#tab3»).html(«
U Pripremi
«); > else < $active = 1; >echo $active; // you have to echo it if you are passing a string return;
Другие решения
Других решений пока нет …
Источник: web-answers.ru
Modx фильтры. Условные модификаторы для шаблонов в MODX
В этой статье Я бы хотел рассказать Вам о фильтрах (модификаторах) в MODx .
В принципе, можно жить и без них, но, зная как и где они применяются, разработчик получает мощный инструмент, с помощью которого можно добавлять небольшую, но, порой, очень полезную логику на Ваш сайт.
В этой статье Я буду говорить про MODx Revolution . Возможность применять фильтры существует благодаря сниппету PHx, который по умолчанию уже встроен в ядро MODx Revolution, в ядре же Evolution PHx отсутствует, поэтому на Evo его необходимо устанавливать отдельно.
Итак, фильтры позволяют манипулировать с данными, которые получаются в результате парсинга плейсхолдеров и тэгов. Они дают возможность модифицировать данные прямо в Ваших шаблонах.
Синтаксис фильтров выглядит следующим образом:
Очень удобно то, что их можно выстраивать в цепочки:
При этом, передавать параметры в сниппеты также возможно. Главное, чтобы фильтр прописывался между названием сниппета и вопросительным знаком:
Time for the MODX7 to go…
В следующей таблице перечислены некоторые фильтры и на примере показано их применение . Хоть в примерах и использован плейсхолдер, но фильтры могут применяться к любому тэгу MODx»а. Убедитесь в том, что плейсхолдер действительно что-либо возвращает.
Условные модификаторы
Сравнивает вывод с заданным значением и в случае если вывод больше либо равен переданному значению продолжает парсинг тэга. Используется совместно с «then» и «else»
Сравнивает вывод с заданным значением. Если вывод больше -продолжает парсинг. Используется с «then» и «else»
Строковые модификаторы
Идентично функции PHP htmlentities . Использует текущее значение системного параметра «modx_charset» с флагом ENT_QUOTES
Создание пользовательский модификаторов
Сниппеты могут использоваться в качестве модификаторов. Для этого просто вместо название фильтра следует вписать имя сниппета. Например, у нас есть сниппет с названием «makeDownloadLink»
Этот вызов передаст в сниппет следующие параметры:
Результатом будет являться то, что будет возвращать сниппет .
Примеры использования
Здесь приведен пример, когда фильтры вызываются друг за другом. Данный пример форматирует дату из строки в другой формат:
Прямой доступ к таблице modx_user_attributes из базы данных из сниппета может быть заменен на простое использование модификатора userinfo. Для получения нужного поля, необходимо в параметры модификатора передать название столбца из БД.
Внутренний ключ: [[!+modx.user.id:userinfo=`internalKey`]]
Имя пользователя: [[!+modx.user.id:userinfo=`username`]]
Полное имя: [[!+modx.user.id:userinfo=`fullname`]]
Дата рождения: [[!+modx.user.id:userinfo=`dob`:date=`%Y-%m-%d`]]
Почтовый индекс: [[+modx.user.id:userinfo=`zip`]]
Да, ещё один способ реализации Ajax-фильтра на сайте =)
Начнём с простого вывода на странице обычного списка ресурсов. Обязательно добейтесь, чтобы нормально работала AJAX-пагинация, потому что своих механизмов работы с AJAX мы писать не будем, а будем использовать методы AJAX, которые есть в pdoPage.
Для фильтров я буду использовать такую вёрстку. Но вёрстка тут особой роли не играет — главное указать правильные классы в JS-коде.
JS-код обработки фильтров выглядит как-то так:
«default», «frontend_js» => «/assets/components/pdotools/js/pdopage.custom.js», «parents» => 0, «limit» => 3, // . >
В стандартном коде мы добавим только условие else на случай, если ответ от сервера будет пустым:
Фильтры в Revolution позволяют манипулировать тем, как будут обрабатываться те или иные теги. Они позволяют вам изменять значения прямо внутри ваших шаблонов.
Фильтры ввода
В настоящее время фильтры ввода используются при подготовке к обработке фильтров вывода. Обычно они используются только внутри движка MODX.
Фильтры вывода
В Revolution фильтры вывода ведут себя так же, как и PHx в Evolution, только фильтры теперь встроены прямо в движок MODX. Синтаксис выглядит так:
Фильтры могут применяться последовательно. Для этого напишите их подряд (слева направо):
Также фильтры могут применяться для модификации вывода сниппетов. Фильтр нужно прописывать перед всеми параметрами (перед знаком вопроса):
Модификаторы вывода
В таблице представлены некоторые модификаторы и примеры их использования. В примерах модификаторы применяются к плейсхолдерам, но вы должны помнить, что они могут применяться к любым тегам MODX. Убедитесь, что используемый тег выводит хоть что-то, что модификатор будет обрабатывать.
Условные модификаторы вывода
if, input | Передаёт произвольный текст на ввод, для следующего модификатора | [[*id:input=`[[+placeholder]]`:is=`1`:then=`Да`:else=`Нет`]] |
or | ИЛИ | [[+numbooks:is=`5`:or:is=`6`:then=`Здесь 5 или 6 книг`:else=`Не уверен, сколько книг`]] |
and | Объединение нескольких модификаторов связью И | [[+numbooks:gt=`5`:and:lt=`10`:then=`Здесь от 5 до 10 книг`:else=`Книг или меньше 5, или больше 10`]] |
isequalto, isequal, equalto, equals, is, eq | Сравнивает передаваемое значение с установленным. Если значения совпадают, выводится значение «then», если нет — «else» | [[+numbooks:isequalto=`5`:then=`Здесь 5 книг`:else=`Не уверен, сколько книг`]] |
notequalto, notequals, isnt, isnot, neq, ne | Сравнивает передаваемое значение с установленным. Если значения НЕ совпадают, выводится значение «then», если нет — «else» | [[+numbooks:notequalto=`5`:then=`Не уверен, сколько книг`:else=`Здесь 5 книг`]] |
greaterthanorequalto, equalorgreaterthen, ge, eg, isgte, gte | То же, только условие «Больше или равно» | [[+numbooks:gte=`5`:then=`Здесь 5 книг или больше`:else=`Здесь меньше пяти книг`]] |
isgreaterthan, greaterthan, isgt, gt | То же, только условие «Строго больше» | [[+numbooks:gt=`5`:then=`Здесь больше пяти книг`:else=`Здесь 5 книг или меньше`]] |
equaltoorlessthan, lessthanorequalto, el, le, islte, lte | То же, только условие «Меньше или равно» | [[+numbooks:lte=`5`:then=`Здесь 5 книг или меньше`:else=`Здесь больше пяти книг`]] |
islowerthan, islessthan, lowerthan, lessthan, islt, lt | То же, только условие «Строго меньше» | [[+numbooks:lte=`5`:then=`Здесь меньше пяти книг`:else=`Здесь 5 книг или больше`]] |
hide | Скрывает элемент, если условие выполняется | [[+numbooks:lt=`1`:hide]] |
show | Отображает элемент, если условие выполняется | [[+numbooks:gt=`0`:show]] |
then | Используется для составления условий | [[+numbooks:gt=`0`:then=`Книги в наличии!`]] |
else | Используется для составления условий (совместно с «then») | [[+numbooks:gt=`0`:then=`Книги в наличии!`:else=`Простите, но все продано.`]] |
memberof, ismember, mo | Проверяет, является ли пользователь членом указанной группы пользователей | [[!+modx.user.id:memberof=`Administrator`]] |
Модификаторы для работы со строками
cat | Добавляет значение после тега | [[+numbooks:cat=`книг`]] |
lcase, lowercase, strtolower | Переводит все буквы в нижний регистр | [[+title:lcase]] |
ucase, uppercase, strtoupper | Переводит все буквы в верхний регистр | [[+headline:ucase]] |
ucwords | Делает первую букву в словах заглавной | [[+title:ucwords]] |
ucfirst | Делает первую букву в строке заглавной | [[+name:ucfirst]] |
htmlent, htmlentities | Преобразует все символы в соответствющие HTML-сущности | [[+email:htmlent]] |
esc, escape | Безопасно экранирует символы, используя регулярные выражения и `str_replace()`. Также экранирует теги MODX. | [[+email:escape]] |
strip | Заменяет все переносы, табуляции и любое количество пробелов только одним пробелом | [[+textdocument:strip]] |
stripString | Вырезает из строки указанную подстроку | [[+name:stripString=`Mr.`]] |
replace | Производит замену подстрок | [[+pagetitle:replace=`Mr.==Mrs.`]] |
striptags, stripTags,notags,strip_tags | Вырезает все теги (можно указать разрешенные теги). Не используйте для обеспечения безопасности. | [[+code:strip_tags]] |
len,length, strlen | Выводит длину строки | [[+longstring:strlen]] |
reverse, strrev | Переворачивает строку символ за символом | [[+mirrortext:reverse]] |
wordwrap | Вставляет перенос строки после каждого n-ого символа (слова не разбиваются) | [[+bodytext:wordwrap=`80`]] |
wordwrapcut | Вставляет перенос строки после каждого n-ого символа, даже если этот символ будет внутри слова | [[+bodytext:wordwrapcut=`80`]] |
limit | Выводит определенное количество символов с начала строки (значение по умолчанию — 100) | [[+description:limit=`50`]] |
ellipsis | Добавляет многоточие и обрезает строку, если она длиннее, чем указанное количество символов (по умолчанию — 100) | [[+description:ellipsis=`50`]] |
tag | Экранирование. Отображает элемент так как он есть, без:tag. Для использования в документации | [[+showThis:tag]] |
add, increment, incr | Прибавляет указанное число (значение по умолчанию +1) | [[+downloads:incr]] [[+blackjack:add=`21`]] |
subtract, decrement, decr | Вычитает указанное число (значение по умолчанию -1) | [[+countdown:decr]] [[+moneys:subtract=`100`]] |
multiply, mpy | Умножает на указанное число (значение по умолчанию *2) | [[+trifecta:mpy=`3`]] |
divide,div | Делит на указанное число (значение по умолчанию /2) | [[+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 | Заменяет символы новой строки n на HTML-тег br | [[+textfile:nl2br]] |
date | Переводит таймстамп в текст, в соответствии с указанным форматом (формат даты) | [[+birthyear:date=`%Y`]] |
strtotime | Переводит дату в виде текста в UNIX таймстамп | [[+thetime:strtotime]] |
fuzzydate | Принимает таймстамп и возвращает дату в виде «Сегодня в 16:20 PM» | [[+createdon:fuzzydate]] |
ago | Возвращает число секунд, минут, недель или месяцев, прошедших с даты, указанной в теге. | [[+createdon:ago]] |
md5 | Создает MD5-хеш значения | [[+password:md5]] |
cdata | Оборачивает вывод тегами CDATA | [[+content:cdata]] |
userinfo | Возвращает запрашиваемое значение из профиля пользователя. Необходимо указывать ID пользователя | [[!+modx.user.id:userinfo=`username`]] |
isloggedin | Возвращает 1, если пользователь авторизован в текущем контексте | [[!+modx.user.id:isloggedin:is=`1`:then=`Yes`:else=`No`]] |
isnotloggedin | Возвращает 1, если пользователь не авторизован в текущем контексте | [[!+modx.user.id:isnotloggedin:is=`1`:then=`No`:else=`Yes`]] |
urlencode | Конвертирует значение как URL, то есть применяет PHP фнукцию `urlencode()` | [[+mystring:urlencode]] |
urldecode | Конвертирует значение как из URL, то есть применяет PHP фнукцию `urldecode()` | [[+myparam:urldecode]] |
Модификаторы для работы с пользователями нужно вызывать некэшированными, чтобы каждый юзер видел актуальные данные.
Использование модификаторов вывода совместно с параметрами
Если у тега есть параметры, то их необходимо прописывать сразу после модификатора:
[[!getResources:default=`К сожалению, ничего не найдено`? parents=`2,3,4,8` includeTVs=`1` ]]
Создание пользовательского модификатора
Любой сниппет может использоваться как модификатор вывода. Для этого просто укажите имя сниппета вместо модификатора. К примеру, создадим сниппет [] , добавляющий к выводу определенное количество восклицательных знаков:
Такой вызов тега передаст в сниппет makeExciting следующие параметры для обработки:
Сегодня полезная статья про фильтры phx и их модификаторы MODX Revo при помощи которых вы сможете прямо внутри шаблонов, манипулировать значением различных тегов.
Зачем они нужны?
phx модификаторы облегчают жизнь modx разработчикам. Допустим у нас есть сайт с каруселью изображений (ну или с баннером), который нужно выводить только на главной странице . Для этого достаточно поместить его в отдельный чанк и затем вывести в шаблоне при помощи такой конструкции
Где: 1 — id главной страницы,
$carusel — чанк с кодом карусели (баннера).
Только полные чайники создают новый шаблон, ради нескольких строк кода карусели. Я тоже таким был, в общем не отчаиваемся и внедряем phx в разработку.
Разберем вышеприведенную конструкцию по подробнее:
*id — выводит id текущей страницы;
— проверяет равно ли *id == 1 ? и если равно, то выводится содержимое then ;
$carusel — выводит чанк carusel.
Вместо *id, можно использовать и другие поля, например *template — выведет текущий используемый шаблон. Либо можно проверять заполнено или нет TV-поле (пусть будет *keywords) и если оно заполнено, то выводить его. Разберем данный случай поподробнее. Дано стандартная разметка:
Задача: не выводить эту строку, если TV keywords не заполнено.
Решение.
Нагрузки
Нужно следить за обработкой модификаторов, бездумное их использование вызовет лишние нагрузки. Вернемся к карусели, данная запись считывается слева направо и МОДХ выполняет все вложенные условия, в независимости от того, верное условие или нет, будет ли выводится на текущей странице содержимое [[$carusel]] , в любом случае его содержимое обработается. В связи с этим более целесообразно переписать запись:
В этом случае, содержимое чанка $carusel , будет обработано в случае, если выполняется условие
и если id текущей страницы равно 1, последнее что обрабатывается — [[$carusel]] , если id не равно 1, тогда — [[$caru]] . А если чанка $caru — нет в элементах, то и нагрузки не будет.
А вообще идеальный вывод будет выглядеть так.
О том, как правильно интегрировать верстку в modx revo в рекомендую почитать здесь.
Примечание! Вы можете комбинировать сколько угодно модификаторов под логику работы компонентов сайта, но главное помните, их основная суть — облегчить разработку , а не усложнять без того сложные задачи. Обычно, самый эффективный и действенный способ — это самый простой, так как чем проще и понятней конструкция — тем легче с ней будет работать в дальнейшем. Ниже перечислены основные модификаторы, которые можете использовать для любого тега МОДХ Рево.
Цепочки модификаторов
Хорошим примером построения цепочки будет отформатировать строку даты в другой формат, например, так:
Прямой доступ к таблице «modx_user_attributes» в базе данных с использованием выходных модификаторов вместо сниппета можно осуществить просто путем использования модификатора userinfo . Выбрать соответствующий столбец из таблицы и указать его в качестве свойства выходного модификатора, например, так:
Внутренний ключ пользователя: [[!+modx.user.id:userinfo=`internalKey`]] Логин: [[!+modx.user.id:userinfo=`username`]] Полное имя: [[!+modx.user.id:userinfo=`fullname`]] Роль: [[!+modx.user.id:userinfo=`role`]] E-mail: [[!+modx.user.id:userinfo=`email`]] Телефон: [[!+modx.user.id:userinfo=`phone`]] Мобильный телефон: [[!+modx.user.id:userinfo=`mobilephone`]] Факс: [[!+modx.user.id:userinfo=`fax`]] День рождения: [[!+modx.user.id:userinfo=`dob`:date=`%Y-%m-%d`]] Пол: [[!+modx.user.id:userinfo=`gender`]] Страна: [[!+modx.user.id:userinfo=`country`]] Штат: [[!+modx.user.id:userinfo=`state`]] Zip код: [[!+modx.user.id:userinfo=`zip`]] Фото: [[!+modx.user.id:userinfo=`photo`]] Комментарий: [[!+modx.user.id:userinfo=`comment`]] Дата последнего входа: [[!+modx.user.id:userinfo=`lastlogin`:date=`%Y-%m-%d`]] Количество входов: [[!+modx.user.id:userinfo=`logincount`]]
Особое внимание обращаем на восклицательный знак [[ ! +modx.user.id]] . Он позволяет НЕ кэшировать содержимое вывода. Почему нужно не кешировать? Представим это так: на сайте 5 пользователей. Первый пользователь зашел на страницу с вызовом:
Добро пожаловать, [[!+modx.user.id:userinfo=`username`]]!
По задумке на этой странице, выводится приветственное сообщение пользователю. Так вот, если результат будет кешироваться, то при первом входе на эту страницу — сохранится имя пользователя который только что зашел — и всем остальным будет показываться не их имя, а имя того пользователя который вошел на эту страницу первым. Чтобы этого избежать — просто не кэшируем этот тэг, с помощью восклицательного знака перед вызовом [[! +modx…
P.s.: Не забываем отключать кэширование тегов, где нужно! Чтобы это сделать — нужно ИЗБАВЛЯТЬСЯ от восклицательных знаков (! ) . Результаты большинства сниппетов вплоне себе могут работать из кэша. В следующем уроке разберем .
Условные модификторы в Revolution позволяют вам манипулировать способом представления или анализа данных в тегах. Так-же позволяют изменять значения внутри ваших шаблонов.
Например у нас есть сниппет MainSlide (он выводит из таблицы MySql изображения в слайдер):
Для вывода слайдера на главной странице нужно сделать простое условие с помощью модификатора MODX, данный модификатор notempty делает проверку содержится ли в плейсхолдоре строка или нет:
В данном примере мы данные положили в плейсхолдер и после делаем проверку через модификатор, так-же можно проверять поля MODX и создынные дополнительные поля:
Если у вас есть более длинный код в операторе a: then = «: else = «, и вы хотите сделать его более читаемым, поставив его на несколько строк, это нужно сделать следующим образом:
В следующей списке перечислены самые нужные условные из существующих модификаторов и приведены примеры их использования. Выходные модификаторы могут использоваться с любыми тегами MODx.
Модификатор or,and
Проверка на несколько значений.
[[+slide:is=`5`:or:is=`6`:then=`В слайдере есть контент`:else=`В слайдере пусто`]]
[[+slide:is=`5`:and:is=`6`:then=`В слайдере есть контент`:else=`В слайдере пусто`]]
Модификатор is
Если тег равен модификатору.
[[*slide:is=`5`:then=`В слайдере есть контент`]]
[[*slide:is=`5`:then=`В слайдере есть контент`:else=`В слайдере пусто`]]
Модификатор ne
Если тег не равен модификатору.
[[*id:ne=`1`:then=`Не главная страница`:else=`Главная страница`]]
Модификатор notempty
Вернет, указанный модификатор, если значение не пусто.
Модификатор hide, show
Скрывает элемент, если условие выполняется или показывает.
Модификатор then, else
Условие, если тег соответствует модификатору, выводим сообщение.
Условие, если тег не соответствует модификатору, выводим сообщение. Используется только в связке с «then»
[[*id:is=`1`:then=`Выводим слайдер`:else=`Слайдер только на главной`]]
Источник: is-tgn.ru
MODX: лучшая CMS, которой вы никогда не пользовались
CMS MODX – система управления контентом, которая была выпущена в 2005 году. В 2009 году, она была представлена под кодовыми именами Evolution и Revolution . Версия Evolution была основана на оригинальном коде, в то время как Revolution была полностью переписана с нуля. Наша сегодняшняя статья посвящена по большей части Revolution .
В консоли управления MODX вы сможете создавать собственные плагины и скрипты, и при этом иметь доступ к ассортименту платных дополнений.
Более подробная информация представлена на главной странице сайта MODX и в разделе « О нас ».
Знакома ли вам эта CMS?
MODX – это больше фреймворк для разработчиков, и уж точно не как готовое решение для любителей « конструкторов ». Это не лучший вариант для тех, кто не знает PHP и HTML . Здесь нет конструкторов меню или готовых модулей, которые можно перетащить в шаблон.
Я бы сказал, что MODX – больше CMF ( content management framework , « фреймворк для управления контентом »), а не CMS . В нем можно использовать API для управления скриптами, без готовых шаблонов страниц и постов.
Копнём глубже
CMS MODX шаблоны разработаны на PHP . Она работает на всех популярных серверах, включая Apache , IIS , Lighttpd и nginx . Она использует MySQL , а в качестве ORB ( object-relational bridge , « объектно-реляционный мост ») — xPDO .
Консоль управления в MODX реализована при помощи ExtJS , Smarty-шаблонов , и собственного API . можно самостоятельно редактировать консоль управления и панели инструментов.
Собственные меню, полный контроль над ACL ( списки контроля доступов ) – все это в вашем распоряжении. Но для полноценной работы с функционалом потребуются определенные навыки и знания.
Платформа MODX поддерживается компанией MODX , LLC . У нее есть и другие продукты, включая облачный хостинг и консалтинговые услуги. Выбирая MODX , можно быть уверенным в надежности, так как компания вряд ли внезапно исчезнет или прекратит поддержку своего проекта.
Обучение и документация
MODX предлагает отличную документацию, включая видеоролики , книги , а также сообщество на форуме . Я думаю, вам будет полезно для начала ознакомиться просмотреть несколько обучающих видео и пробежаться по документации , чтобы хоть немного вникнуть в суть.
Установка
MODX можно установить, только скачав ZIP-архив и загрузив его содержимое на сервер:
Скачиваем MODX
В ядре данной платформы отсутствуют автоматические обновления. Но есть дополнение, которое позволит без труда обновляться до свежих релизов. Кстати говоря, все дополнения также просто обновляются через консоль.
Управление проектом происходит через GitHub , и там всегда можно найти свежие скриншоты и релизы проекта. Я рекомендую скачать самую последнюю версию платформы и загрузить ее на свой сервер.
Чем примечательна CMS MODX
CMS MODX Evolution – это нечто вроде движка для продвинутых пользователей. С самого начала перед вами будет пустой шаблон, над которым придется поработать, а также сотня настроек и функций, с помощью которых можно полностью адаптировать платформу под собственные проекты. Здесь нет никаких конструкторов, помощников, drag and drop интерфейсов, виджетов и прочих удобств.
Если вам нравится писать код вручную, MODX вам точно подойдет. Эта CMS позволяет достаточно быстро обучиться ручной переработке сайтов.
Если вам нужно получить мультиязычную, многосайтовую платформу с раздельным контентом и отдельными уникальными панелями управления для клиентов, то вы точно оцените то, на что способна MODX .
Её можно использовать для создания API , форумов, блогов, корпоративных сайтов, сайтов-визиток! Здесь может быть несколько языков, расширенные настройки прав доступа и безопасности, а также возможность настраивать административные панели под каждого клиента.
Создание веб-страницы
Для формирования веб-страницы в MODX используется стек элементов. Так называемые шаблоны, сниппеты, фрагменты кода, переменные шаблона, а также собственная система тегов:
В шаблонах при помощи тегов можно использовать пользовательские данные, данные о текущей странице, метаданные, глобальные системные настройки, переменные, фрагменты кода, сниппеты или заглушки.
Использование MODX предполагает работу над HTML-шаблоном , а также парсинг HTML-кода в готовые фрагменты, а PHP-кода — в сниппеты. Также в шаблонах можно использовать любые произвольные поля. Далее после MODX CMS установки нужно создать ресурс, привязать его к шаблону, заполнить нужные поля, и на этом все!
Resource ( ресурс ) — обозначение конечной точки. Это то, что указывается в URL-адресе . Тип содержимого ресурса может быть отличным от HTML ( например, PDF или двоичные данные ). Можно установить принудительное скачивание контента или же отображать его прямо в браузере. Ресурс может даже вести на файл или на внешнюю страницу, либо перенаправлять посетителя на другой контент в пределах сайта.
Template ( шаблон ) — это рамка ( фрейм ), в которой отображается контент. Все ресурсы привязываются к шаблону.
Chunk ( фрагмент кода ) — это HTML или JS-код с возможностью повторного использования.
Snippets ( сниппеты ) используются для PHP-кода . У сниппетов есть доступ к ядру MODX и ко всем его объектам.
Сниппеты могут запускать фрагменты, и наоборот. Шаблоны и ресурсы могут запускать и то и другое. Это четыре основных составляющих, при помощи которых можно формировать веб-страницы.
Plugin ( плагины ) способны расширять функционал ядра.
Template Variable ( переменная шаблона ) — это любые произвольные данные, которые могут понадобиться внутри шаблона, и для которых можно указать ресурс. Например, можно использовать переменную шаблона для произвольного изображения баннера на странице, но потом каждый ресурс может привязать иное изображение для отображения шаблоне. Это что-то вроде произвольных полей WordPress , но с большим набором функций.
Можно комбинировать любые из этих элементов при помощи категорий ( Categories ). Не забывайте их использовать, чтобы фрагменты кода и сниппеты были организованы, и ими было проще пользоваться.
Знакомство с административной панелью (Manager)
Админ-панель CMS MODX Revolution основывается на ExtJS . За счет этого в ней можно работать с drag and drop интерфейсом, формами, динамическими таблицами, контекстным меню для правой кнопки мыши и многим другим.
Удобная функция управления позволяет указывать источники медиа-ресурсов, которые также привязываются к правам доступа. У вас могут быть такие ресурсы, доступ к которым клиент получает только после авторизации. При этом конкретные ресурсы для определенных пользователей могут быть доступны только в режиме read-only .
Настройки системы основываются на пространстве имён. Можно создать пространство имён для самого себя и отдельно для того, чтобы использовать его в каком-то из элементов приложения.
Административная панель не такая уж и сложная, просто требуется некоторое время на знакомство и изучение всех функций и возможностей:
Контекст
Хочу обратить ваше внимание на пункт Website . Это « Контекст », который отвечает за то, что видят пользователи, когда попадают на ваш сайт. У контекстов могут быть абсолютно разные древа ресурсов, права доступа, язык и т. д. По умолчанию, контекст Mgr скрыт из древа.
Контексты можно расценивать как полностью отдельные сайты, хотя даже крупные и сложные ресурсы редко пользуются преимуществом от создания дополнительных контекстов. Одно из распространенных применений контекстов заключается в создании на сайте раздела для зарегистрированных пользователей. Все, что от вас требуется, это запретить гостям видеть определенный контекст.
Можно использовать контексты как вам заблагорассудится. Но будьте готовы к тому, что если пользователь авторизован в одном из контекстов, это совсем не значит, что у него будет доступ ко всем другим. Если нужно сделать одну форму авторизации для всех контекстов, то понадобится немного поработать.
Контексты можно использовать для отделения разделов сайта. Некоторые используют их для разделения версий сайта на разных языках.
Шаблоны и теги
Я уже упоминал о том, что в CMS MODX есть встроенная система тегов шаблона. Давайте кратко ознакомимся с ее.
Каждый тег открывается и закрывается двумя квадратными скобками [[ … ]] .
Специальные символы определяют, что именно используется: фрагмент кода, ресурсы или системные настройки. Как ими пользоваться:
[[*. ]]: звёздочка отвечает за ресурсы. То есть, за конкретные данные, используемые текущим источником. Например, заголовок страницы или основной контент. Аналогичным образом можно использовать переменные шаблона.
[[++. ]]: осуществляется поиск системных настроек, будь то site_url или произвольная настройка вроде company_phone1 ( если до этого вы ее создали ).
[[~##]]: этот тег генерирует URL для ресурса по ID ( например , [[~32]] ).
[[$. ]]: этот тег извлекает HTML-код из фрагмента.
[[. ]]: тег без спецсимвола приведет к запуску сниппета.
[[%. ]]: выводит языковую строку.
[[-. ]]: комментарий к коду MODX .
[[. ]]: восклицательный знак указывает MODX на то, что не нужно кешировать вывод данного тега; его нужно использовать в дополнение к предыдущим символам. Если вы вызываете [[!$SomeChunk]] , то вывод будет обрабатываться каждый раз вместо того, чтобы выводиться из кеша. Я уже говорил, что в MODX CMS функциональные возможности входит встроенная система кеширования?
Параметры тегов
К тегам можно применять параметры и фильтры и таким образом изменять их вывод. Например, можно добавить несколько параметров к автоматически сгенерированному URL-адресу :
Из примера видно, что синтаксис с применением параметров слегка отличается от параметров в привычной строке запроса URL . Вопросительный знак обозначает начало списка параметров, и каждый параметр начинается со знака input=`something tasty`]]