We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 30874
    • 5 Posts
    эм... поискал по форуму, по статьям на modx.ru, по интернету в целом... но вразумительного ответа на свой вопрос не нашел.
    вопрос вот какой: можно ли запретить кэширование определенного чанка?

    есть шаблон, в который вставляется чанк с подсказкой.
    идея заключается в том, что подсказка должна выбираться рандомно.

    код чанка {{tooltip}} такой:
    <div class="tooltip">
        <div class="tooltip_header"><img src="assets/templates/csg/images/question.png" /> Знаете ли вы, что...</div>
    [!Ditto? &startID=`38` &tpl=`tooltip_tpl` &summarize=`1` &randomize=`true` !]
        <span class="tooltip_hider">[ <a href="javascript:tooltipHide()">скрыть подсказку</a> ]</span>
        <span class="tooltip_hider">[ <a href="javascript:tooltipHideForever()">скрыть подсказку и больше не показывать</a> ]</span>
    </div>
    


    ditto работает с чанком {{tooltip_tpl}}:
        <div class="tooltip_content">
            <p>[+introtext+]</p><br />
            <a href="/[~[+id+]~]">узнать больше</a>
        </div>
    


    боюсь, придется писать какой-нибдуь сниппет для случайного выбора записей из БД, и вывода их и шаблона через echo... но хотелось бы как-то по-современнее.
    спасибо.
      • 30874
      • 5 Posts
      в общем, времени, как всегда, нет, поэтому перевел в сниппет [!tooltip!]:
      <?php
      $result = $modx->getDocumentChildren("38",1,0,'id,introtext','','id','DESC','');
      $result=$result[rand(0,count($result)-1)];
      
      $output = '';
      $output .= '            <div class="tooltip">';
      $output .= '                <div class="tooltip_inner">';
      $output .= '                    <div class="tooltip_header"><img src="assets/templates/csg/images/question.png" /> Знаете ли вы, что...</div>';
      $output .= '                    <div class="tooltip_content">';
      $output .= '                        <p>'.$result['introtext'].'</p>';
      $output .= '                    </div>';
      $output .= '                    <a href="/civilinfo/'.$result['id'].'.asp" class="tooltip_link">узнать больше</a>';
      $output .= '                    <span class="tooltip_hider"><a href="javascript:tooltipHide()">скрыть подсказку</a></span>';
      $output .= '                    <span class="tooltip_hider"><a href="javascript:tooltipHideForever()">скрыть подсказку и больше не показывать</a></span><br />';
      $output .= '                    <div style="clear:both;"></div>';
      $output .= '                </div>';
      $output .= '            </div>';
      $output .= '<script type="text/javascript">';
      $output .= 'function tooltipHide(){ $(".tooltip").slideUp(); }';
      $output .= 'function tooltipHideForever(){ $(".tooltip").slideUp(); $.cookie("hide_tooltip","true",{path:"/"}); }';
      $output .= '</script>';
      
      return $output;
      ?>
      


      вышло, конечно, "в лоб", но, учитывая производительность сервера и небольшое количество элементов, вполне подходяще
        • 29487
        • 385 Posts
        В параметре Ditto должно быть &randomize=`1` а не true
          • 30874
          • 5 Posts
          Quote from: Temus at Sep 03, 2010, 06:23 AM

          В параметре Ditto должно быть &randomize=`1` а не true

          насколько я понимаю, там должно быть непустое значение. так что верно будет и так, и так

          ditto с этими параметрами замечательно работает еще в одном месте сайта.
            • 30874
            • 5 Posts
            придумал, казалось бы, очевидное решение для данного случая:
            так как Ditto вызывается без кэша, и отображает только один элемент, можно было бы обертку из {{tooltip}} засунуть в {{tooltip_tpl}}, и проблема была бы решена. но мы, как оказалось, не ищем легких путей... или просто выспаться надо )8

            апдейт: не проканало. не понимаю, почему... видимо, шаблон для дитто все-равно генерируется только один раз /8
              • 29487
              • 385 Posts
              &randomize=`true` не работает, я проверял smiley
              будет выводиться всегда последний элемент
                • 20380
                • 118 Posts
                Что-то не то явно. Я делала такой рандомный вызов дитто. Если дитто некешируемый, то все работает. Может, у тебя все-таки рандом нормально не включен? Переправь на &randomize=`1` и не извращайся
                  • 9085
                  • 630 Posts
                  http://ditto.modxcms.com/files/snippet-ditto-php.html#randomize

                  Возможно, в данном конкретном случае randomize=`true` и работает.. но всё же лучше придерживаться документации... Тем более, что её "хватает". Иногда вместо изобретения велосипедов можно воспользоваться всего-навсего добавлением одного параметра в уже работающий сниппет.

                  Удачи!


                    Правильно заданный вопрос повышает вероятность получения нужного ответа.
                    Что-то не работает? Загляните в лог ошибок!
                    Есть проблема? "Локализуйте" её!
                    Ответы на большинство вопросов по MODx | MODx RTFM | API Evo Revo | галопом по Европам Азиям smiley wikibooks(ru) Ditto(en) | Wayfinder e-book | Заметки и о MODx