MODX вывод статьи в разных категориях
30/07/2016
Просмотры: 893

MODX-вывод статьи в разных категориях

Недавно потребовалось в одном из проектов организовать вывод одной публикации сразу в нескольких категориях. Необходимо было организовать принцик как на движке Wordpress. Требовалось простое и быстрое решение для запуска данной возможности на рабочем проекте.

На сайте используется блог с большим количеством дочерних категорий, для удобной навигации по сайту. Ежедневно сайт обновляется новыми публикациями, большая часть которых должна выводиться всразу в нескольких категориях. Основное условие-это предотвратить появление дублей.

Выборка ресурсов на страницах категорий реализоана на pdoResources. Для реализации данной возможности было принято решение создать фильтрацию на основе TV.

Как в MODX Revo сделать вывод статьи в разных категориях блога

Приступаем к реализации:

  • Необходимо создать новый TV параметр с возможностью выбора сразу нескольких значений. Я решил выбрать checkbox. Делаем привязку к шаблону, который отвечает за вывод публикации.
  • Во вкладке ПАРАМЕТРЫ ВВОДА необходимо выбрать тип TV, а также заполнить поле ВОЗМОЖНЫЕ ЗНАЧЕНИЯ

MODX Revo настройка tv

Прописываем значения, присваивая названию переменную.

К примеру у нас есть категории:

  1. Категория дом
  2. Категория сад
  3. Категория огород
1
Категория дом==dom||Категория сад==sad||Категория огород==ogorod

 Теперь можно переходить к публикациям в админке сайта MODX Revolution и выставить значения данного TV (с названием в моем случае category-name). Отмечаем галочками, в каких категориях мы хотим отображать нашу публикацию.

Теперь переходим к странице категории, на которой размещен код выборки дочерних ресурсов (публикаций) и добавим фильтр по созданной нами TV.

На моем сайте испрользовалась такая конструкция выборки:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[[!pdoPage@rus?
&element=`pdoResources`
&parents=`26`
&depth=`10`
&tpl=`blog-post`
&includeTVs=`blog-photo`
&includeContent=`1`
&hideContainers=`1`
&limit=`6` 
]]
[[!+page.nav:notempty=`
[[!+page.nav]] 
`]] 

 В таком варианте выводится 6 последних дочерних публикаций. Вносим изменения:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[[!pdoPage@rus?
&element=`pdoResources`
&parents=`4,5,6,7,8,9,10`
&depth=`10`
&tpl=`blog-post`
&includeTVs=`blog-photo`
&tvFilters=`category-name==%dom%`
&includeContent=`1`
&hideContainers=`1`
&limit=`6` 
]]
[[!+page.nav:notempty=`
[[!+page.nav]] 
`]] 

 Добавляем ID всех категорий с публикациями:

1
&parents=`4,5,6,7,8,9,10`

 И добавляем фильтрацию по значению, присвоенному для недавно созданного нами TV: 

1
&tvFilters=`category-name==%dom%`

Обязательно указать знаки % до и после значения TV, у меня заработало только с этими символами, без них вывод был пустым.

Далее, открываем следующую категорию публикаций и прописываем в родителе точно такой код, но меняем значение в фильтре, которое соответствует родителю.

К примеру, мы сделали Родителя  - Категория дом.

Открыв Родителя - Категория огород, прописываем в строке с фильтром:

1
&tvFilters=`category-name==%ogorod%`

 И так для всех родителей. Теперь выборка будет осуществляться по всем существующим категориям, а выводиться только с меткой Огород.

У меня все получилось, надеюсь материал будет полезен в ваших разработках проектов на MODX Revo.