We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 12736
    • 259 Posts
    @goodboy Смотрите в сторону вызова Ditto с фильтрацией

    Вот тут посмотрите, http://modx.ru/blog/409/, должно помочь.
      • 12736
      • 259 Posts
      Quote from: misho at May 29, 2009, 04:54 AM

      Подскажите, как правильно передать значение возвращаемое Ditto в качестве параметра? huh

      [[Slogan? &text=[!Ditto? &documents=`[[UltimateParent? &topLevel=`3`]]` &tpl=`tplJustPageIntroText` !] &id=`1` ]]


      ИМХО не заработает такая штука: в вызове Slogan вызываете Ditto, а в вызове Ditto - UltimateParent. Кто знает точно сколько уровней вложений в вызове сниппета может осилить MODx? Мне всегда казалось, что только два.

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

      [!Snippet1? &param=`[[Snippet2]]`!]

      misho, надо сделать так - вызов Ditto оформить как самостоятельный сниппет. В этом сниппете вызвать UltimateParent и все это дело подставить в вызов Slogan:

      сниппет DittoCall

      //параметры для UltimateParent
      
      $paramUlti['topLevel'] = '3';
      
      //вызываем UltimateParent
      $UltimaDocs = $modx->runSnippet('UltimateParent', $paramUlti);
      
      //создаем масив параметров для Ditto
      $paramDitto['tpl'] = 'tplJustPageIntroText';
      $paramDitto['id'] = '1';
      $paramDitto['documents']=$UltimaDocs;
      
      //вызываем Ditto
      $html = $modx->runSnippet('Ditto', $paramDitto);
      
      return $html;
      


      вызов Slogan

      [!Slogan? &text=[[DittoCall]] &id=`1` !]

        • 785
        • 2,113 Posts
        Quote from: ikarushka at Jul 10, 2009, 01:05 AM

        вызов Slogan
        Раз уж все равно создается сниппет с вызовами двух других, логично будет и третий вызывать из него, или исправить Slogan, добавив в него вызов нужных сниппетов. В этом случае можно будет кэшировать вызов.
          Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
          Статьи о MODx, регулярно новые публикации
          • 12736
          • 259 Posts
          grin Согласен абсолютно.
          Но ведь тройное вложение в вызове сниппета, как было в посте вопроса, не будет работать? Двойное будет, а тройное?
            • 16278
            • 928 Posts
            @rolph
            У Ditto есть и параметр &language
            &language=`russian-UTF8` или &language=`russian` (для Windows-1251)

            Можно отредактировать текст по вкусу в соответствующем файле в папке ditto/lang - сейчас там стоит:
            $_lang['prev'] = "< назад"; 
            $_lang['next'] = "далее >";

            laugh KP
              • 785
              • 2,113 Posts
              Quote from: ikarushka at Jul 10, 2009, 03:20 AM

              Но ведь тройное вложение в вызове сниппета, как было в посте вопроса, не будет работать? Двойное будет, а тройное?
              Не пробовал, но думаю, что не будет. Но в любом случае лично я стараюсь по мере возможностей не использовать и двойное вложение, так как при этом один из вызовов будет некэшируемый. Мне кажется, что лучше почти всегда создавать новый сниппет, который вызывает все, что нужно, и уже его кэшировать.
                Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
                Статьи о MODx, регулярно новые публикации
                • 2294
                • 24 Posts
                Спасайте. Голову сломал немогу придумать как запихать в шаблон дитто такую конструкцию...
                (картинка на самом деле будет заменена тв, описание в спане тоже тв)
                Суть в том что нужно собирать по три слоя как бы. непридумаю как... (оно дальше явой выводится. и хочеться чтоб по три слоя с картинкой дито выплёвывал в слой class="panel", закрывал и открывал новый)
                документы для перебора лежат в одной папке, из документов тискаем только твпараметры.

                Если дитто так неумеет раскажите как с помощью апи сделать такое чтоли =(


                <div class="panel">	
                	<div style="background-image:url(upload/1.jpg)" class="11"><a onclick="CngClass(this);" href="javascript:loadId('77');"> <span>1</span></a></div>
                	
                	
                	
                	
                		
                	<div style="background-image:url(upload/2.jpg)" class="11"><a onclick="CngClass(this);" href="javascript:loadId('16');"> <span>2</span></a></div>
                	
                	
                		
                	
                	
                		
                	<div style="background-image:url(upload/3.jpg)" class="11"><a onclick="CngClass(this);" href="javascript:loadId('15');"> <span>3</span></a></div>
                	
                		
                	</div>	
                	
                	
                	<div class="panel">	
                	<div style="background-image:url(upload/4.jpg)" class="11"><a onclick="CngClass(this);" href="javascript:loadId('14');"> <span>4</span></a></div>
                	
                	
                	<div style="background-image:url(upload/5.jpg)" class="11"><a onclick="CngClass(this);" href="javascript:loadId('25');"> <span>5</span></a></div>
                	
                		
                		
                	
                	
                		
                	<div style="background-image:url(upload/6.jpg)" class="11"><a onclick="CngClass(this);" href="javascript:loadId('18');"> <span>6</span></a></div>
                	
                		
                	</div>	
                



                Зарание благодарен.
                  • 12736
                  • 259 Posts
                  Образно вы пишите wink А каждая строчка в контейнере .panel это отдельный документ? из отдельного документа берется?
                    • 2294
                    • 24 Posts
                    <div style="background-image:url(upload/2.jpg)" class="11"><a onclick="CngClass(this);" href="javascript:loadId(’16’);"> <span>2</span></a></div> вот это отдельный док.
                    значения которые тискаються из доков выделил. тоесть мне нужно брать из дока тв с картинкой, айди документа, тв с описанием.
                    делать три таких слоя, и обрамлять их в <div class="panel"> </div> .

                    (у меня слайдер выводит по три скриншота, прокрутка слаедёра идет панелькой по три скриншота)




                      • 12736
                      • 259 Posts
                      Так чтоб быстро с помошью одного Ditto сделать такую штуку - это не получится.
                      Тут-либо думать в сторону какого либо вложенного вызова: Ну то есть первый сниппет, который ты пишешь сам определяет количество документов в папке, делит это число на 3 и начинает цикл. В каждом цикле в контейнере <div class="panel"> </div> вызывается Ditto, который вытаскивет по три документа используе это
                      <div style="background-image:url(upload/[+tvimg+])" class="11"><a onclick="CngClass(this);" href="javascript:loadId('[+id+]');"> <span>2</span></a></div>

                      как теплейт.

                      Но это не красиво. Надо наверно делать так:
                      Пусть Ditto выводит все документы в обычную ленту без заморочек с <div class="panel"> </div>. А потом с помощью например jQuery обрамляешь каждую тройку документов в <div class="panel"> </div>.

                      Как реализовать такое обрамление я тебе не скажу - плохо я владею JS - но знаю точно, с помощью jQuery это сделать можно.

                      Наверняка есть еще варианты.