• Reflect + Ditto + Tags#

  • spfuture Reply #1, 2 years, 8 months ago

    Reply
    И так задача, есть куча документов выводятся через Reflect с группировкой по году, у документов есть TV tags, Ditto нормально бегает по тэгам, но собственно как Reflect'у передать тэги чтобы при вызове параметров Ditto он и на них обратил внимание, есть идеи?


  • esche Reply #2, 1 year, 11 months ago

    Reply
    Новый топик решил не начинать. Поиском толкового ничего найти не получилось.

    Итак, есть Reflect и Ditto, для связки используется &id=`wp` (видимо, это и является ответом на предыдущий вопрос). В общем-то сочетание из demo-сайта..

    [[Ditto? &id=`wp` &parent=`3` &display=`10` &dateFormat=`%d.%m.%Y` &sortBy=`createdon` &truncText=`»` &removeChunk=`Comments` &tpl=`ditto_blog` &paginate=`1` &extenders=`summary,dateFilter` &paginateAlwaysShowLinks=`1` &tagDelimiter=`, ` &tagData=`documentTags2`]] 
    
    [!Reflect? &config=`wordpress` &targetID=`3` &path=`3` &dittoSnippetParameters=`parents:3` &wp_tags=`` &id=`wp` &getDocuments=`1`!]
    


    Для каждого документа (новости/записи/поста) в общем списке (страница с Ditto) выводятся тэги. Шаблон ditto_blog позаимствован (быть может с изменениями) из стандартного примера:
    <div class="ditto_summaryPost">
      <h3><a href="[~[+id+]~]" title="[+title+]">[+title+]</a></h3>
      <div class="ditto_info" >By <strong>[+author+]</strong> on [+date+]. <a  href="[~[+id+]~]#commentsAnchor">Comments
      ([[Jot?&docid=`[+id+]`&action=`count-comments`]])</a></div><div class="ditto_tags">Tags: [+tagLinks+]</div>
      [+summary+]
      <p class="ditto_link">[+link+]</p>
    </div>


    Теперь при нажатии на ТЭГ по ссылке передается не только тэг, но и установленная дата (если переходим со страницы wp_year=...), а если установлен тэг, то при нажатии на REFLECT значение тэга также учитывается при выводе по датам. Можно ли ввести ограничение на передачу параметров между сниппетами?

    [DITTO без фильтрации] - все ок
    Страница: modx.my/3.html
    ссылка в tagLinks: modx.my/3.html?wp_tags=TAG1&wp_start=0
    ссылка в REFLECT: modx.my/3.html?wp_month=5&wp_year=2010&wp_day=false&wp_start=0

    [ссылка из Reflect - архив за месяц] - как убрать в tagLinks все параметры кроме wp_tags=...?
    Страница: modx.my/3.html?wp_month=5&wp_year=2010&wp_day=false&wp_start=0
    ссылка в tagLinks: modx.my/3.html?wp_month=5&wp_year=2010&wp_day=false&wp_start=0&wp_tags=TAG1
    ссылка в REFLECT: modx.my/3.html?wp_month=5&wp_year=2010&wp_day=false&wp_start=0

    [ссылка из tagLinks - все записи с тэгом TAG1] - как убрать в Reflect wp_tags=...?
    Страница: modx.my/3.html?wp_tags=TAG1&wp_start=0
    ссылка в tagLinks: modx.my/3.html?wp_tags=TAG1&wp_start=0
    ссылка в REFLECT: modx.my/3.html?wp_tags=TAG1&wp_start=0&wp_month=5&wp_year=2010&wp_day=false

    ps. Нутром чую.. что литр должно быть просто..
    pps. Самое похожее, что нашел - тут, но не то
    ppps. Стандартный demo-блог работает аналогично.


  • esche Reply #3, 1 year, 11 months ago

    Reply
    Нашел! точнее
    Quote from: mrhaw at May 10, 2010, 08:17 PM
    Here is one approach http://modxcms.com/forums/index.php/topic,37590.0.html
    You need to edit the code to not preserve current url vars... as it uses Ditto
    changing it will most likely break other functions!
    Quote from: hotdiggity at May 10, 2010, 09:53 PM
    The placeholder for the Reflect URL is [+url+] - shouldn't it be possible to use pHx to filter out tags in this placeholder?
    Quote from: mrhaw at May 11, 2010, 03:59 PM
    Yes! Using regex I'd think.
    Вольный перевод:
    выкинуть лишнее без влезания в код не получится.
    Как вариант - использовать pHx + регулярные выражения для обработки плейсхолдера [+url+]


  • esche Reply #4, 1 year, 11 months ago

    Reply
    Очистить вызов Reflect от тэгов (при нахождении на странице с тэгом), и вообще от лишних параметров удалось так:

    <? 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`!]
    ?>
    

    Быть может кто-нибудь подскажет, более рациональное решение!?

    ps. А вообще, и Reflect (ссылки при группировке по месяцам) и Ditto (всё, что в [+linkTags+]) в ссылки добавляют всё, что есть в $_GET.. Это не есть хорошо - при открытии одной страницы с "левым" параметром &blabla=3131 получаем страницу с кучей ссылок на "левые" страницы-дубли...


  • esche Reply #5, 1 year, 11 months ago

    Reply
    Продолжение.. Очистить ссылки от дат на странице вывода Ditto получилось.. хотя, на мой взгляд, также кривовато. Для этого используем snippet tagLinks (в любом случае использовался мной на странице отдельной статьи-новости)
    В итоге, в шаблоне вместо плейсхолдера [+tagLinks+] вставляем сниппет : (чанк ditto_blog стал выглядеть примерно так
    <div class="info"><a class="info" title="[+title+]" href="[~[+id+]~]">[+title+]<span class="infobox"></span></a></div>
    <p>[+summary+]
    [!tagLinks? &tv=`documentTags2` &label=`<br />ÐеÑки: ` &id=`[+id+]` &path=`3`!]
    </p>
    


    Все итоги поисков собраны в статье "как приделать к MODx тэги как на Wordpress". Вроде, все моменты учтены, однако не расписаны и не разжеваны..