Несмотря на довольно солидное сообщество, не только русскоязычное, на некоторые простые вопросы ответы найти удается с трудом. Без претензий, но факт. (Скорее, претензии к себе.. плохо ищу, или не могу правильно сформулировать вопрос.. хотя, ряд аналогичных вопросов на форуме оставлен без ответа).
Для начала, до разработки сайтов на MODx рекомендуется ознакомиться с некоторыми терминами, специфичными для этой системы.. Сниппеты, Чанки, TV, Шаблоны… организация документов. В качестве примера можно изучить DEMO-сайт, почитать WikiУчебник .
В статье описан работающий пример организации записей (постов) по датам и тэгам (по аналогии с блогом на wordpress) с удобным редактированием. Все подводные камни расписывать не буду.. Скажу лишь, что в DEMO-блоге этот механизм работает не совсем так, как описано, а привести его без особых ухищрений к привычному виду не удалось…
Итак, делаем тэги + даты на MODx
- Внимательно изучаем статью http://modx.ru/blog/add_tags/ и комментарии к ней. Делаем все, что там описано. Добавляем TV с именем tags, сниппеты Ditto, tagLinks и TvTagCloud нам пригодятся.
- Если планируются многословные тэги, а также есть желание упростить их ввод в “админке” (ткнул на тэг - он добавлен) читаем про пробелы и виджет тэгов MODx . После - добавляем mm_widget_tags(’tags’,’ ‘) , и исправляем, если требуется, &delimeter = ‘,’ (в вызове Ditto)
- Сниппет Reflect - своеобразная надстройка над Ditto. В месте вывода архива по датам (июнь 2010, май 2010…)
[!Reflect? &config=`wordpress` &targetID=`3` &path=`3` &dittoSnippetParameters=`parents:3` &id=`wp` &getDocuments=`1`!]
Основная часть закончена. По идее, всё должно отображаться как нужно. Теперь бубен и напильник
При совместном использовании Ditto, Reflect и тэгов к ссылкам добавляются “лишние” параметры . К ссылкам дат добавляется &tags, а к ссылкам тэгов добавляются даты (wp_year…)
- Чистим ссылки в выводе Reflect. Сделано добавлением нового сниппета Leftmenu с кодом:
<? php // snippet 'Leftmenu';
$tmp=$modx->runSnippet('Reflect', array(
'targetID' => 3,
'config'=>'wordpress' ,
'path'=>'3' ,
'tplContainer'=>'reflect_tpl',
'dittoSnippetParameters'=>'parents:3',
'id'=>'wp',
'getDocuments'=>'1'
));
// echo $tmp; // для проверки корректности выполнения сниппета$tmp = preg_replace ('/(&)?(wp_)?tags=[^&"]*(&)?(start=0&)?/is','',$tmp);
// регулярник для очистки от параметров wp_tags=xxx (от текущего ditto) tags=xxx (облако тэгов) и start=0
echo $tmp;
//[!Reflect? &config=`wordpress` &targetID=`3` &path=`3` &tplContainer=`reflect_tpl` &dittoSnippetParameters=`parents:3` &wp_tags=`` &id=`wp_` &getDocuments=`1`!]
?>
- 2. Чистим ссылки на страницы тэгов в выводе DITTO:
В шаблоне вместо плейсхолдера [+tagLinks+] используем вызов сниппета - вывод тэгов со ссылками только на тэги
[!tagLinks? &tv=`tags` &label=`
Метки: ` &id=`[+id+]` &path=`3`!]
Если с первого раза не получится - отчаиваться не стОит. Опыт.. опыт.. и ещё раз опыт.
А вообще-то можно использовать стандартную конфигурацию из DEMO-сайта.
ps По умолчанию, Reflect считает, что в Ditto используется дата создания документа. Иногда удобнее использовать дату публикации документа. Кроме указания соответствующего параметра в Ditto, эту информацию следует передать и в Reflect, примерно так: &dittoSnippetParameters=`parents:11|sortBy:pub_date`