Начнём с простого вывода на странице обычного списка ресурсов. Обязательно добейтесь, чтобы нормально работала AJAX-пагинация, потому что своих механизмов работы с AJAX мы писать не будем, а будем использовать методы AJAX, которые есть в pdoPage.
Для фильтров я буду использовать такую вёрстку. Но вёрстка тут особой роли не играет — главное указать правильные классы в JS-коде.
JS-код обработки фильтров выглядит как-то так:
«default», «frontend_js» => «/assets/components/pdotools/js/pdopage.custom.js», «parents» => 0, «limit» => 3, // . >
В стандартном коде мы добавим только условие else на случай, если ответ от сервера будет пустым:
Фильтры в революции позволяют управлять способом представления данных. Они позволяют изменять значения внутри шаблонов.
В революции выходной фильтр применяется один или более раз из серии выходных модификаторов, которые ведут себя подобно PHx вызывам в MODx Evolution — за исключением, что они встроены в ядро. Синтаксис выглядит следующим образом:
How To Manually Install MODX CMS
Они также могут быть соединены (выполняется слева направо):
Вы также можете использовать их, чтобы изменить выход сниппета; внимание, модификатор идет после имени сниппета и перед вопросительным знаком, например,
В следующей таблице перечислены некоторые из существующих модификаторов и приведены примеры их использования. Хотя приведенные ниже примеры являются для некоторых тегов, выходные модификаторы могут быть использованы с любым тегом MODx. Убедитесь, что модификатор получает данные.
Модификатор
[ [+numbooks:is=`5`:or:is=`6`:then=`There are 5 or 6 books!`:else=`Not sure how many books`] ]
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`] ]
[ [+numbooks:gt=`0`:then=`Now available!`:else=`Sorry, currently sold out.`] ]
memberof, ismember, mo
Модификатор
lcase, lowercase, strtolower
Транформация в малые буквы
ucase, uppercase, strtoupper
Трансформация в большие буквы
MODx JSON TV to MongoDB.mov
Первая буква слова заглавная
Первая буква заглавная
htmlent, htmlentities
Замена тегов HTML
Безопасно убирает символы
Замена перевода каретки, табуляции и множества пробелов на один пробел
stripString
Удаляет значение из строки
striptags, stripTags,notags,strip_tags
Убирает HTML теги
len,length, strlen
reverse, strrev
Новая строка после указанного количества символов
wordwrapcut
Вставляет символ новой строки после определенного количества символов.
Выводимое кол-во символов
Обрезание строки после указанного кол-ва символов
Отображает сырой элемент без: тега. Полезно для документации.
Если значение может изменяться динамически, то его следует сделать некэшированным. Например:
[ [+placeholder:default=`A default value!`] ]
Это означает, что значение может иногда быть пустым, а иногда нет. Зачем его хранить в кэше? Это может исключить то, что значение может появиться.
Если вы не уверены будет ли результат при выполнении сниппета, то логично сделать значение по умолчанию:
[ [!getResources:default=`Sorry — nothing matched your search.`? parents=`2,3,4,8` includeTVs=`1`] ]
Всем доброго здравия. В этой статье я расскажу как сделать фильтр документов по tv-параметрам на сайте под управлением Modx Revolution. Мы будем использовать сниппет tagManager2 от Аndchir . Этот сниппет умеет работать сразу с несколькими tv, а также с числовыми данными (в виде цены) и множественным списком. Каждый этот пример мы разберем далее.
1. Для начала нужно установить tagManager2
Для этого идем в Приложения/Установщик/
жмем кнопку «Загрузить дополнение» и в строке поиска вбиваем tagManager2
Также еще нужно установить сниппет getPage и getProducts . Таким образом раздел «Управление пакетами» должен выглядеть так (сниппет translit, кстати, отвечает за транслитерацию псевдонимов на латиницу)
Загружаем, устанавливаем пакеты и идем в «Настройки системы»
2. Настраиваем сниппет tagManager2
В Системных настройках выбираем раздел tag_manager2
Модификаторы modx. Использование условий if else в MODx. Настраиваем сниппет tagManager2
Сегодня полезная статья про фильтры phx и их модификаторы MODX Revo при помощи которых вы сможете прямо внутри шаблонов, манипулировать значением различных тегов.
Зачем они нужны?
phx модификаторы облегчают жизнь modx разработчикам. Допустим у нас есть сайт с каруселью изображений (ну или с баннером), который нужно выводить только на главной странице . Для этого достаточно поместить его в отдельный чанк и затем вывести в шаблоне при помощи такой конструкции
Где: 1 — id главной страницы,
$carusel — чанк с кодом карусели (баннера).
Только полные чайники создают новый шаблон, ради нескольких строк кода карусели. Я тоже таким был, в общем не отчаиваемся и внедряем phx в разработку.
Разберем вышеприведенную конструкцию по подробнее:
— проверяет равно ли *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.: Не забываем отключать кэширование тегов, где нужно! Чтобы это сделать — нужно ИЗБАВЛЯТЬСЯ от восклицательных знаков (! ) . Результаты большинства сниппетов вплоне себе могут работать из кэша. В следующем уроке разберем .
Да, ещё один способ реализации Ajax-фильтра на сайте =)
Начнём с простого вывода на странице обычного списка ресурсов. Обязательно добейтесь, чтобы нормально работала AJAX-пагинация, потому что своих механизмов работы с AJAX мы писать не будем, а будем использовать методы AJAX, которые есть в pdoPage.
Источник: neonkaraoke.ru
SEO оптимизация сайта на MODX Revolution
Насколько MODX Revolution подходит для создания сайта, который будет продвигаться в поисковых системах?
Если кратко — то на пятерку. Возможно что с небольшим минусом, но только с небольшим. В целом же MODX Revolution, при должной настройке, у любого SEO-оптимизатора вызовет одобрение, так как трудностей с ним будет очень мало.
Рассмотрим основные моменты настройки сайта на MODX Revolution для его успешного дальнейшего продвижения.
1. Использовать www перед адресом сайта или нет?
MODX Revolution все равно, будет ли у вас имя сайта начинатся с www или нет. Вы сами выбираете это. Разработчики MODX предусмотрели возможность указать вариант использования доменного имени.
Для этого вам необходимо открыть файл .htaccess в корне сайта и найти в его начале 2 закомментированных блока:
# Rewrite www.domain.com -> domain.com — used with SEO Strict URLs plugin #RewriteCond %{HTTP_HOST} . #RewriteCond %{HTTP_HOST} !^example-domain-please-change.com [NC] #RewriteRule (.*) http://example-domain-please-change.com/$1 [R=301,L] # # or for the opposite domain.com -> www.domain.com use the following # DO NOT USE BOTH # #RewriteCond %{HTTP_HOST} . #RewriteCond %{HTTP_HOST} !^www.example-domain-please-change.com [NC] #RewriteRule (.*) http://www.example-domain-please-change.com /$1 [R=301,L]
Раскомментируйте один из них и замените адрес домена на свой.
Теперь при неверном наборе адреса будет происходить 301 редирект на правильный вариант. Это самое лучшее решение для этой ситуации.
2. Настройка ЧПУ (человеко-понятные урл)
MODX Revolution полностью поддерживает ЧПУ, обеспечивая страницам красивые адреса. Правда по-умолчанию этот функционал отключен.
Для его включения необходимо в системе управления перейти в раздел «Система»->»Настройка системы» и в фильтре выбрать «Дружественные URL».
Откроется ряд настроек, связанных с работой механизма Friendly URL`s.
Необходимо установить следующие значения для основных из них:
- automatic_alias — Да
- friendly_urls — Да
- use_alias_path — Если Да — то адреса будут вложенными, если Нет, то вложенности не будет
- global_duplicate_uri_check — проверяет адреса страниц на уникальность, орбязательно Да, если в прошлом пункте вы выбрали Нет
3. Установка пакета Translit
Дополнение translit (его можно установить через раздел «Управление пакетами») позволит автоматически генерировать значение поля «Псевдоним» латинскими буквами при редактировании документа. Хотя мы только что включили настройку automatic_alias, и MODX начал заполнять это поле, но заполняет он его в том числе и русскими буквами.
После установки пакета translit необходимо снова вернутся в раздел «Настройки системы», найти параметр friendly_alias_translit и присвоить ему значение russian:
Теперь псевдонимы для ваших страниц будут генерироваться на английском языке.
MODX Revolution предлагает вам слеудующих набор полей, которые могуть использоваться для управления Meta тегами:
- pagetitle — основной заголовок;
- longtitle — расширенный заголовок;
- menutitle — заголовок для отображения в меню;
- description — описание страницы,
Вот тут, на наш взгляд, и есть небольшой минус MODX Revolution, так как нет однозначного соответствия имеющихся полей и требуемых нам.
Бывает достаточно трудно задать title страницы, для него не предусмотрено отдельное поле, приходится как-то комбинировать из pagetitle и longtitle, а поле для keywords вообще не предусмотрено.
Исправляем. Необходимо создать 3 новых TV поля: seoTitle, seoKeywords, seoDescription, задать им категорию Seo, у первых двух тип ввода Тест, у последнего Текстовая область. Эти TV поля дослжны быть доступны для всех шаблонов сайта.
Отлично, теперь мы можем совершенно независимо задать title, keywords, description для любой страницы сайта.
Чтобы не заполнять всегда эти и перечисленные выше поля в обязательном порядке, мы используем пару небольших сниппетов, которые проверяют поля на то, пустые они или нет, и выводят значение нужного поля.
seoTitle — формирует значение тега title.
[[seoTitle]]
Исходный код:
$pagetitle = $modx->resource->get(«pagetitle»); $longtitle = $modx->resource->get(«longtitle»); $seotitle = $modx->resource->getTVValue(«seoTitle»); $sitename = $modx->config[«site_name»]; $v = »; if($seotitle != »){ $v = $seotitle; } else{ if($longtitle == »){ $v = $pagetitle; } else{ $v = $longtitle; } } # иной алгоритм для главной страницы if($modx->config[«site_start»] == $modx->resource->get(«id»)){ return $v; } return $v.» — «.$sitename;
pageTitle — формирует заголовок для страницы, тег h1.
[[pageTitle]]
$longtitle = $modx->resource->get(«longtitle»); if($longtitle != »){ return $longtitle; } return $modx->resource->get(«pagetitle»);
Таким образом при минимальном заполнении страницы достаточно заполнить pagetitle, но в тоже время вы можете указать значения полей longtitle, seoTitle и других.
5. Настройка страницы с 404 ошибкой
Все что вам нужно, что бы MODX отображал корректную страницу с ошибкой 404, это создать ее, обязательно опубликовать (но скрыть в меню), и изменить значение настройки error_page на id вашей страницы:
Надо заметить, что MODX корректно возвращает 404 код ошибки при попытке просмотра несуществующей страницы.
6. Sitemap.xml
Наличие файла sitemap.xml для современного сайта весьма важно. Для MODX Revolution есть отличное дополение, которое позволит сформировать вам этот файл с минимальными затратами.
- Скачиваем и устанавливаем пакет GoogleSiteMap
- Создаем в корне сайта новый документ, называем его sitemap.xml, в поле псевдоним пишем sitemap (без xml!), шаблон пустой. Переходим на вкладку «Настройки» и в поле Тип содержимого ставим XML. Также необходимо снять галочки «Доступен для поиска» и «Использовать HTML редактор».
- В поле «Содержимое ресурса» помещаем вызов сниппета GoogleSiteMap.
- Публикуем ресурс.
Наш файл должен открываться по адресу http://ваш-сайт/sitemap.xml и быть похожим на http://www.createit.ru/sitemap.xml
На официальной странице документации GoogleSiteMap доступно описание всех параметров сниппета: http://rtfm.modx.com/display/ADDON/GoogleSiteMap
7. Robots.txt
Содержимое этого файла для MODX Revolution зависит от конкретного сайта, самое минимальное может быть таким:
User-agent: * Disallow: /manager/ Host: ваш-сайт.ru