Архив новостей/постов + метки (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`] ]
Не забудьте убрать лишние пробелы!
