Вывод ресурсов по TV modx revo

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
487 просмотрели, 0 комментировали

Когда MODX установлен, настроен и загружены основные пакеты, можно приступать к разработке сайта. Для начала давайте разберем архитектуру системы MODX и ее основные сущности, с которыми будем работать, и как они друг с другом связаны.

Сущности

Ресурсы

  • документ
  • ссылка
  • символическая ссылка
  • файл

При разработке мы будем работать в основном с первым типом — документ, который представляет на выходе простую html страницу. Но остальные типы тоже могут быть полезны — например, при создании карты сайта MODX мы создаем ресурс типа «Файл» с расширением «XML».

У ресурса есть базовые поля, заложенные разработчиками:

  • заголовок pagetitle
  • расширенный заголовок longtitle
  • описание
  • аннотация
  • содержимое

Посмотреть название поля можно наведя курсор на его заголовок.

Все эти поля можно редактировать на странице изменения ресурса.

Для создания дополнительных полей, например, цены товара или просмотров статьи — используются 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`]]

Дополнения указываем в комментах

Более новые статьи:

  • Перенос сайта на modx revo на другой хостинг или на локальный компьютер — 21/02/2017 23:42
  • Migx использование и примеры — 07/02/2017 07:38

Более старые статьи:

  • При использовании shopkeeper ошибка ошибка TypeError: $(. ).fancybox is not a function
  • Обновление modx revo ДО самой актуальной версии ОДНИМ НАЖАТИЕМ
  • Не грузятся пакеты в modx — решено!

Добавить комментарий

Рекомендуем

Новости

Авторизация

Поиск

В помощь сайтостроителю

Вы здесь: Сайтостроение CMS MODx Вывод ресурсов с помощью pdoResources

Посмотрите как клиент отказался от Seo и потом все же вернулся к нам в seouspeh.ru — наглядный сред более 5 лет

А вот и через пару месяцев еще)), класс:

Новый кейс — за 2 последних года (с очень адекватным клиентом):

Посмотрите как мы в 10 раз уменьшили нагрузку на базу данных MySQL (перегруз был на 500% от лимитов)

Источник: saitsozdanie.ru

Оцените статью
Добавить комментарий