modx - ditto, reflect, tags (tagging) - делаем тэги на MODx

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

Для начала, до разработки сайтов на MODx рекомендуется ознакомиться с некоторыми терминами, специфичными для этой системы..  Сниппеты, Чанки, TV, Шаблоны… организация документов. В качестве примера можно изучить DEMO-сайт, почитать WikiУчебник .

В статье описан работающий пример организации записей (постов) по датам и тэгам (по аналогии с блогом на wordpress) с удобным редактированием. Все подводные камни расписывать не буду.. Скажу лишь, что в DEMO-блоге этот механизм работает не совсем так, как описано, а привести его без особых ухищрений к привычному виду не удалось…

Итак, делаем тэги + даты на MODx

  1. Внимательно изучаем статью http://modx.ru/blog/add_tags/ и комментарии к ней. Делаем все, что там описано. Добавляем TV с именем tags, сниппеты Ditto, tagLinks и TvTagCloud нам пригодятся.
  2. Если планируются многословные тэги, а также есть желание упростить их ввод в “админке” (ткнул на тэг - он добавлен) читаем про пробелы и виджет тэгов MODx . После - добавляем mm_widget_tags(’tags’,’ ‘) , и исправляем, если требуется, &delimeter = ‘,’ (в вызове Ditto)
  3. Сниппет Reflect - своеобразная надстройка над Ditto. В месте вывода архива по датам (июнь 2010, май 2010…)
    [!Reflect? &config=`wordpress` &targetID=`3` &path=`3` &dittoSnippetParameters=`parents:3` &id=`wp` &getDocuments=`1`!]

Основная часть закончена. По идее, всё должно отображаться как нужно. Теперь бубен и напильник :)

При совместном использовании Ditto, Reflect и тэгов к ссылкам добавляются “лишние” параметры . К ссылкам дат добавляется &tags, а к ссылкам тэгов добавляются даты (wp_year…)

  1. Чистим ссылки в выводе 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. 2. Чистим ссылки на страницы тэгов в выводе DITTO:
    В шаблоне вместо плейсхолдера [+tagLinks+] используем вызов сниппета - вывод тэгов со ссылками только на тэги
    [!tagLinks? &tv=`tags` &label=`
    Метки: ` &id=`[+id+]` &path=`3`!]

Если с первого раза не получится - отчаиваться не стОит. Опыт.. опыт.. и ещё раз опыт.

А вообще-то можно использовать стандартную конфигурацию из DEMO-сайта.

ps По умолчанию, Reflect считает, что в Ditto используется дата создания документа. Иногда удобнее использовать дату публикации документа. Кроме указания соответствующего параметра в Ditto, эту информацию следует  передать и в Reflect, примерно так: &dittoSnippetParameters=`parents:11|sortBy:pub_date`

Метки:

Автор будет признателен, если Вы поделитесь ссылкой на статью, которая Вам помогла:
BB-код (для вставки на форум)

html-код (для вставки в ЖЖ, WP, blogger и на страницы сайта)

ссылка (для отправки по почте)

Комментарии (4) к записи “modx - ditto, reflect, tags (tagging) - делаем тэги на MODx”

  1. Алекс сообщает :

    да уж… про reflect написано, мягко говоря, непонятно… Как его связать с Ditto, где должен быть вызов ditto и тп - нихрена не понятно. “нам понадобится это, это и это, воткните все как-нибудь куда-нибудь и давайте напильником что-то там править” - ерунда какая-то.

  2. levik сообщает :

    Алекс, в этой статье сделан акцент на моментах, которые упущены ( или недостаточно описаны на мой субъективный взгляд) в документации и статье с русскоязычного сайта. Если Вам не понятно, “что и где должно быть”, попробуйте разобраться… что и где должно быть… Ditto - список записей (где он должен быть в Вашем шаблоне?), Reflect - список дат (аналогично..)

    Вяжется Reflect и Ditto при помощи параметра id (в документации). Вызов Reflect следует вставлять туда, где будет выводиться список дат. Стандартный вызов для конфигурации Wordpress можно посмотреть в Demo-сайте. Что-то вроде такого:

    [!Reflect? &config=`wordpress` &targetID=`3` &path=`3` &dittoSnippetParameters=`parents:3` &wp_tags=`` &id=`wp` &getDocuments=`1`!]

    Удачи!

  3. Алекс сообщает :

    Ну если так, то согласен ) С этим всем делом я разобрался, но пришлось сходить к конкурентам ;)) Так что я бы все-таки добавил более “разжеваный” вариант - новичкам пригодится.
    Кстати, была интересная проблема с TvTagCloud - русские тэги отображались кракозябрами. Сайт в UTF8, проблем с русским нет нигде, даже tagLinks отображает русские тэги нормально. А вот в облаке - ерунда, так и не решил проблему. Залил сайт на хостинг - все ок… Видимо дело все-таки в denwer-е, на котором у меня это все крутится локально, потому как изменилось только это..
    Не было у вас такой проблемы?

  4. 2vietnamese сообщает :

    3accepted…

Добавить комментарий