• Портфолио
  • Услуги
  • Цены
  • Контакты
Веблог

Архив новостей/постов + метки (Ditto+Reflect+TagLinks)

Веблог » Архив новостей/постов + метки (Ditto+Reflect+TagLinks)

При создании блога или просто сайта, с часто обновляющимися новостями, нередко встает задача сделать архив новостей, разделенный по месяцам, и метки, у каждого из постов/новостей. Оба эти дополнения работают в связки с Ditto, и, к сожалению, простым их подключением не обойтись.

В чем возникает проблема? При сортировке постов по меткам, получаются некорректные ссылки у архива. Точнее они-то работающие, но сортировка тогда происходит и по выбранному месяцу, и по нажатой ранее метке. А это не совсем то, что хотелось бы видеть. Было найдено в недрах интернета решение, как обойти данный момент, но почему то у меня оно работало не полностью. Пришлось немного отредактировать. Для тех, кто столкнулся с такой же проблемой, думаю, оно будет не лишним.

Вызов Ditto:

[ !Ditto? &tpl=`Шаблон новости` &depth=`3` &paginate=`1` &dateFormat=`%d.%m.%Y` &extenders=`dateFilter ` &tagDelimiter=`,` &tagData=`TV параметр меток` &id=`wp` &tagDisplayDelimiter=`, ` &tplTagLinks=`Шаблон вывода метки`! ]

На всякий случай поясню:

&extenders=`dateFilter `- подключается расширение для сортировки по месяцам
&
tagDelimiter=`,` - разделитель тэгов в TV параметре
&tagData=``
- имя TV параметра меток
&
tagDisplayDelimiter=`, ` - разделитель меток, который будет выводиться на сайте
&tplTagLinks=` ` - название шаблона одной метки
&id=`wp`
- ID для вызова Reflect

Вызов Reflect (его мы вызываем через сниппет, например [ !archive! ], что бы убрать лишнюю сортировку по меткам, если она есть) :

<?php

$tmp=$modx->runSnippet('Reflect', array(

'targetID' =>'7', //ID страницы с вызовом Ditto, где будет происходить сортировка по месяцам

'path' =>'7', //ID или alias этой же страницы

'config'=>'wordpress',

'dateSource'=>'createdon',

'wp_tags'=>'',

'id'=>'wp',

'dittoSnippetParameters'=>'parents:15,16', //15,16 – это ID страниц-контейнеров с новостями/постами

'getDocuments'=>'1'

));

$tmp = preg_replace ('/(&)?(wp_)?tags=[^&"]*(start=0&)?/is','',$tmp);

echo $tmp;

?>

Данный вызов аналогичен вызову Reflect в шаблоне:

[ !Reflect? &config=`wordpress` &targetID=`7` &path=`7` &dittoSnippetParameters=`parents:15,16` &wp_tags=`` &id=`wp` &getDocuments=`1` &dateSource=`createdon`! ]

Вызов TagLinks внутри шаблона Ditto:

[ +tagLinks+ ]

И наконец, шаблон метки, который указывали в Ditto:

<a href="название_страницы.php?wp_tags=[ +tag+ ]&wp_start=0" class="ditto_tag" rel="tag">[ +tag+ ]</a>

В адресе указывается имя страницы, на который будет происходить сортировка по меткам.

В таком виде он у меня отлично работает, все сортируется и выводится. Единственное, что может еще понадобится, это вывод меток, если у вас есть отдельная страница для каждой из новостей/постов, у меня он сделан вот так:

[ [tagLinks? &id=`[ *id* ]` &value=`` &separator=` , ` &label=`` &path=`alias страницы для сортировки` &element=`span`] ]

Не забудьте убрать лишние пробелы!

  • Портфолио
  • Услуги
  • Цены
  • Контакты
© 2009-2018 All Rights Reserved