modx - ditto, reflect, tags (tagging) - делаем тэги на MODx
Несмотря на довольно солидное сообщество, не только русскоязычное, на некоторые простые вопросы ответы найти удается с трудом. Без претензий, но факт. (Скорее, претензии к себе.. плохо ищу, или не могу правильно сформулировать вопрос.. хотя, ряд аналогичных вопросов на форуме оставлен без ответа).
Для начала, до разработки сайтов на 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`
Метки: modx
да уж… про reflect написано, мягко говоря, непонятно… Как его связать с Ditto, где должен быть вызов ditto и тп - нихрена не понятно. “нам понадобится это, это и это, воткните все как-нибудь куда-нибудь и давайте напильником что-то там править” - ерунда какая-то.
Алекс, в этой статье сделан акцент на моментах, которые упущены ( или недостаточно описаны на мой субъективный взгляд) в документации и статье с русскоязычного сайта. Если Вам не понятно, “что и где должно быть”, попробуйте разобраться… что и где должно быть… Ditto - список записей (где он должен быть в Вашем шаблоне?), Reflect - список дат (аналогично..)
Вяжется Reflect и Ditto при помощи параметра id (в документации). Вызов Reflect следует вставлять туда, где будет выводиться список дат. Стандартный вызов для конфигурации Wordpress можно посмотреть в Demo-сайте. Что-то вроде такого:
[!Reflect? &config=`wordpress` &targetID=`3` &path=`3` &dittoSnippetParameters=`parents:3` &wp_tags=`` &id=`wp` &getDocuments=`1`!]
Удачи!
Ну если так, то согласен ) С этим всем делом я разобрался, но пришлось сходить к конкурентам ;)) Так что я бы все-таки добавил более “разжеваный” вариант - новичкам пригодится.
Кстати, была интересная проблема с TvTagCloud - русские тэги отображались кракозябрами. Сайт в UTF8, проблем с русским нет нигде, даже tagLinks отображает русские тэги нормально. А вот в облаке - ерунда, так и не решил проблему. Залил сайт на хостинг - все ок… Видимо дело все-таки в denwer-е, на котором у меня это все крутится локально, потому как изменилось только это..
Не было у вас такой проблемы?
3accepted…
…