This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
/*Для создания, собственно меток, логично использовать штатный tv параметр с типом autotag (автометка), поэтому вначале, |
создаю его и как нибудь называю. Не задумываясь особенно, назвал его по названию типа — autotag. |
Добавляю созданный tv в шаблон для вывода постов и с ним — все. |
Для вывода меток, делаю два сниппета, один для создания облака меток — tagCloud, |
второй для вывода меток в блоге и в самом посте — tagLinks.*/ |
$ base = $ modx -> config [ ‘base_url’ ]; |
$ tvname = $ modx -> getOption ( ‘tvname’ , $ scriptProperties , » autotag «); |
$ output = «»; |
$ content_type = $ modx -> getObject ( ‘modContentType’ , array ( ‘mime_type’ => ‘text/html’ )); |
if (substr_count( $ _SERVER [» REQUEST_URI «], $ content_type -> get ( ‘file_extensions’ ))) |
$ parent = $ modx -> resource -> parent ; |
$ url = $ modx -> makeUrl ( $ modx -> resource -> parent ); |
> else |
$ parent = $ modx -> resource -> id ; |
$ url = $ modx -> resource -> uri ; |
> |
$ q = $ modx -> newQuery ( ‘modTemplateVarResource’ ); |
$ q -> select ( ‘DISTINCT(`modTemplateVarResource`.`value`)’ ); |
$ q -> innerJoin ( ‘modTemplateVar’ , ‘tv’ , » tv.id = modTemplateVarResource.tmplvarid «); |
$ q -> innerJoin ( ‘modResource’ , ‘res’ , ‘res.id=modTemplateVarResource.contentid’ ); |
$ q -> where ( array ( |
‘tv.name’ => $ tvname , |
‘res.context_key’ => $ modx -> resource -> context_key , |
‘res.parent’ => $ parent |
) |
); |
if ( $ q -> prepare () $ q -> stmt -> execute ()) |
while ( $ row = $ q -> stmt -> fetch ( PDO :: FETCH_ASSOC )) |
$ result [] = $ row [ ‘value’ ]; |
> |
> |
if ( $ result ) |
$ result = implode( $ result , ‘,’ ); |
$ result = array_unique(explode( ‘,’ , $ result )); |
foreach ( $ result as $ value ) |
$ output .= » < $ url >?tag= < $ value >’> «; |
> |
> |
return $ output ; |
/*Этот сниппет выводит список уникальных значений меток, в виде ссылок, с GET параметром, который потом будет использоваться, |
для фильтрации вывода ресурсов: |
[[!tagCloud:default=`Пока нет меток`? getOption ( ‘tags’ , $ scriptProperties ); |
$ get = $ modx -> getOption ( ‘get’ , $ scriptProperties , ‘0’ ); |
$ base = $ modx -> config [ ‘base_url’ ]; |
$ content_type = $ modx -> getObject ( ‘modContentType’ , array ( ‘mime_type’ => ‘text/html’ )); |
if (substr_count( $ _SERVER [» REQUEST_URI «], $ content_type -> get ( ‘file_extensions’ ))) |
$ url = $ modx -> makeUrl ( $ modx -> resource -> parent ); |
> else |
$ url = $ modx -> resource -> uri ; |
> |
if (! $ get ) |
if (! $ tags ) |
$ tags = explode( ‘,’ , $ tags ); |
foreach ( $ tags as $ value ) |
$ output [] = » < $ url >?tag= < $ value >’> «; |
> |
return implode( ‘ ‘ , $ output ); |
> else |
return (!empty( $ _GET [ ‘tag’ ]))? » autotag==% < $ _GET [ ‘tag’ ]>% » : » ; |
> |
/*Этот сниппет, выводит список ссылок, для блога и ресурса, а так же передает GET-параметр в вызов pdoResources, |
для фильтрации по меткам. В принципе, это разные задачи, но я решил не плодить сниппеты. |
Что в нем происходит: |
Сниппет может принимать в качестве параметров два значения: |
[[!tagLinks? get=`1`]] |
В первом случае, сниппет разбивает полученную автометку на отдельные значения, заворачивает их в ссылки, |
как в tagCloud и выводит. Для того, чтобы можно было выводить метки и в блоге и в самой статье, в начале сниппета |
получаю расширение для типа html и проверяю его наличие в адресной строке. Если адрес заканчивается на .html, |
то в url попадает адрес родителя (для статьи). |
Во втором случае, когда передается параметр https://gist.github.com/specoff/df742fba64823b95636c» target=»_blank»]gist.github.com[/mask_link]
Часть 5 — Интернет-магазин на MODx Revo. Вывод статей (ресурсов) в MODx Revo. Вывод полей ресурсов в шаблоне MODx Revolution Создание сайта на MODX Revolution — введение в основы разработкиСтатья-введение по основам разработки сайтов на CMF MODX Revolution. Разберем основные сущности системы, их взаимосвязи, создание страниц, шаблонов, сниппетов, познакомиться с синтаксисом вызова тегов.
Олег Толочко , 10 Августа 2022 Когда MODX установлен, настроен и загружены основные пакеты, можно приступать к разработке сайта. Для начала давайте разберем архитектуру системы MODX и ее основные сущности, с которыми будем работать, и как они друг с другом связаны. СущностиРесурсы
При разработке мы будем работать в основном с первым типом — документ, который представляет на выходе простую html страницу. Но остальные типы тоже могут быть полезны — например, при создании карты сайта MODX мы создаем ресурс типа «Файл» с расширением «XML». У ресурса есть базовые поля, заложенные разработчиками:
Посмотреть название поля можно наведя курсор на его заголовок. Все эти поля можно редактировать на странице изменения ресурса. Для создания дополнительных полей, например, цены товара или просмотров статьи — используются TV поля. Принцип их работы разберем дальше. ШаблоныЗа внешний вид ресурса отвечает шаблон. Если у ресурса не будет шаблона, то при открытии этой страницы в браузере выведется поле ресурса «содержимое». Таким образом можно создавать любые страницы просто на HTML, CSS и JS, не вникая в синтаксис MODX. Тогда в поле content ресурса будет полностью страница, условно: Document Шапка Контент Подвал Вопрос только, зачем тогда использовать шаблоны? Чтобы разобраться, давайте пойдем от совсем простого. У нас есть элементы, которые повторяются на каждой странице сайта: шапка и подвал. Если размещать код страницы в поле «содержимое», то для изменения шапки или подвала придется заходить и редактировать каждый ресурс. При большом количестве страниц это будет слишком долго и неудобно. И тут на помощь приходят шаблоны. Создадим базовый шаблон с шапкой и подвалом, а между ними укажем поле «содержимое». Тогда шапку и подвал мы сможем редактировать один раз — в шаблоне, а контент страницы уже отдельно в ресурсах. Document Шапка [[*content]] Подвал Шаблон — это заранее сформированный код страницы, в котором мы указываем, где вывести поля ресурса, переменные шаблона, чанки или сниппеты. У большинства сайтов есть типовые страницы: статья, раздел, каталог, товар, вопрос-ответ и подобное. Каждый такой тип страницы — это отдельный шаблон. Для создания шаблона мы возьмем условную верстку статьи, и вместо конкретного заголовка и текста просто укажем, где нужно вывести поля ресурса «заголовок» и «содержимое». [[*longtitle:default=`[[*pagetitle]]`]] Шапка [[*pagetitle]][[*content]] Подвал Теперь нужно «привязать» шаблон к ресурсу. Для этого на странице ресурса выберите в поле «Шаблон» подходящий вариант. При генерации страницы MODX заменит указанные в шаблоне переменные на их значения у конкретного ресурса. Можно также создать базовый шаблон страницы, где будет только шапка и подвал, а между ними будет выводиться содержимое ресурса. Это полезно для создания отдельных страниц, которые встречаются на сайте в единственном экземпляре: «о нас», «контакты», «правила», «доставка» и подобные, где шаблон как таковой не нужен, но общие элементы должны быть как на всем сайте. Я обычно делаю шаблоны под повторяющиеся страницы, и один «пустой», в котором есть только шапка и футер, как раз для таких целей. Единичным страницам назначаю его, а контент верстаю прямо в поле «содержимое». Запомнили: ресурс — это страница или файл, шаблон — это верстка страницы, где указаны переменные, которые MODX заменяет на конкретные значения при генерации страницы. Ресурсу мы назначаем шаблон, но при этом ресурс может быть и без шаблона. Тогда при просмотре этого ресурса выведется контент поля «содержимое». ЧанкиЧанк — это дословно «кусок» кода. В чанках мы можем использовать только html, js, css и теги MODX. Чистый PHP в чанках работать не будет, но его можно вызывать через сниппеты, которые мы разберем дальше. Зачем нужны чанки, если у нас уже есть шаблоны? Давайте представим, что нужно сделать 3 шаблона: «пустая страница», «товар» и «категория». В каждом из шаблонов нам нужна будет одинаковая шапка сайта и подвал, а также форма обратной связи. По логике, шаблон — это верстка, поэтому мы верстаем страницы в html, и создаем 3 разных шаблона, правильно? Но тут замечаем, что код шапки и подвала снова повторяется в 3 разных местах — в 3 шаблонах. Пробема та же самая, которую раньше мы пытались решить с помощью шаблонов — редактировать неудобно, долго, повышается вероятность ошибки. Было бы неплохо хранить и редактировать код этих элементов в одном месте, а вызывать в нужных местах как переменную. Как раз для этого нужны чанки. Вывод ресурсов с помощью pdoResourcesЧасто нужно вывести определенные ресурсы, старые методы вывода — сильно нагружали сервер, поэтому лучше использовать pdoResources в этих случаях. Вывод ресурсов в modx с помощью pdoResources: [[+pagetitle]][[+tv.img:notempty=``]] [[+content:striptags:ellipsis=`100`]] [[+publishedon:date=`%d.%m.%Y`]] Дополнения указываем в комментах Более новые статьи:
Более старые статьи:
Добавить комментарийРекомендуемНовостиАвторизацияПоискВ помощь сайтостроителю Вы здесь: Сайтостроение CMS MODx Вывод ресурсов с помощью pdoResources Посмотрите как клиент отказался от Seo и потом все же вернулся к нам в seouspeh.ru — наглядный сред более 5 лет А вот и через пару месяцев еще)), класс: Новый кейс — за 2 последних года (с очень адекватным клиентом): Посмотрите как мы в 10 раз уменьшили нагрузку на базу данных MySQL (перегруз был на 500% от лимитов) Источник: saitsozdanie.ru |