We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 27746
    • 44 Posts
    Возможно ли штатными средствами (например Дитто) проделать такое:
    Выводить меню из соседних новостей.
    Тоесть например, у посетителя открыта новость №50 и хотелось бы сформировать для него ссылки на соседние новости такого вида:
    новость №48
    новость №49

    новость №50
    новость №51
    новость №52

      • 31022
      • 328 Posts
      Новость -- это документ системы с собственным id, так ведь? Можно использовать для такого списка даже wayfinder.
        • 27746
        • 44 Posts
        Quote from: umanuma at Aug 08, 2008, 05:01 PM

        Новость -- это документ системы с собственным id, так ведь? Можно использовать для такого списка даже wayfinder.
        Id конечно у каждого документа собственное, но т.к. это не единственный раздел сайта, то идут они не по порядку.
          • 1788
          • 1,103 Posts
          Внимательно читаем доку в сниппете и найдется там параметр сортировки. wink
            • 785
            • 2,113 Posts
            Quote from: antey at Aug 09, 2008, 06:24 AM

            Внимательно читаем доку в сниппете и найдется там параметр сортировки. wink
            В каком сниппете? В теме два разных упоминается. И вообще-то причем тут сортировка, когда требуется выбрать отдельные документы, а не расположить выбранные в нужном порядке.
              Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
              Статьи о MODx, регулярно новые публикации
              • 27746
              • 44 Posts
              Да, тут дело не в сортировке. Задача простая. Надо чтоб человек попав на страницу новости, мог с неё перейти на любую из 3-х последующих, либо 3-х предыдущих. Только как решить эту задачу, я не понял smiley
                • 31022
                • 328 Posts
                Id конечно у каждого документа собственное, но т.к. это не единственный раздел сайта, то идут они не по порядку.

                Можете показать структуру сайта? Под новости можно сделать отдельную родительскую директорию, тогда "идут они не по порядку" не будет принципиально, и сортировка вам поможет.

                UPD. Я был невнимателен, не уловил задачу в предыдущем посте.
                  • 785
                  • 2,113 Posts
                  Опять про сортировку... Может я не так понял проблему, но как мне кажется, имеются документы, например, 4, 5, 7, 10, 11, 20, 21, 22. Нужно, чтобы при текущем документе 11 выводились ссылки на 7, 10, 20 и 21, а при текущем документе 21 выводились ссылки на 11, 20, 22. Если нужные ссылки получены, отсортировать их – никаких проблем.
                  Как это сделать стандартными средствами, лично я не знаю, сам бы написал небольшой сниппет, формирующий нужные ссылки.
                    Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
                    Статьи о MODx, регулярно новые публикации
                    • 27746
                    • 44 Posts
                    Quote from: AKots at Aug 09, 2008, 09:50 PM

                    Опять про сортировку... Может я не так понял проблему, но как мне кажется, имеются документы, например, 4, 5, 7, 10, 11, 20, 21, 22. Нужно, чтобы при текущем документе 11 выводились ссылки на 7, 10, 20 и 21, а при текущем документе 21 выводились ссылки на 11, 20, 22. Если нужные ссылки получены, отсортировать их – никаких проблем.
                    Как это сделать стандартными средствами, лично я не знаю, сам бы написал небольшой сниппет, формирующий нужные ссылки.

                    Да, именно так.
                    Плюс ко всему, на мой взгляд, неразумно все новости кидать в одну папку. Потом фиг разберешься, если в день добавляется хотябы 1-2 новости.
                    Потому новости идут по принципу
                    новости
                    |- 2008
                    |-06
                    |-Новость 1
                    |-Новость 2
                    |-Новость 3
                    |-07
                    |-Новость 4
                    |-Новость 5
                    |-Новость 6
                    |-08
                    |-Новость 7
                    |-09
                    |-Новость 8
                    |-Новость 9

                    Ну в общем понятно, что нужно писать что-то свое >:(
                      • 16955
                      • 59 Posts
                      Давненько мной был подправлен скрипт PrevJumpNext v0.3... C его помощью можно реализовать то, что вы хотите - только слегка подправьте код. Кроме того дополнительно выводится и аннотация соседних статей.

                      В общем по-порядку:
                      1. Создаем сниппет, я назвал его TwoPrevNext
                      <?php
                      /* **************************
                       * Snippet: NextThree
                       * By: LeonCrab
                       * Date: February 2008
                       * version: 0.1 (based on the PrevJumpNext v0.3)
                       * **************************
                       *
                       * Function:
                       * Generates links to Next, Next+1, Next+2 document of a same directory. 
                        * 
                       * There is many option which can allow you to sort the document, set 
                       * the text to use with the element, etc ... :
                       * - sortBy : Sort items by? 'menuindex' or 'id' or 'createdon', etc... (default createdon)
                       * - sortHow : Sort items How? 'ASC' or 'DESC' (default ASC)
                      * - noPrevNextText : Text to display if there is no Prev or no Next element :(default "-") 
                      *
                       * The output use <div> to allow you to CSS the links
                       *
                       * Enjoy and don't esitate to ask new features
                       * Exemples :
                       * 
                       * [[NextThree? &sortBy=`menuindex` &sortHow=`ASC` &linkAncor='longtitle']]
                       * 
                       */
                      
                       
                      # Settings
                      
                      # Sort items by? 'menuindex' or 'id' or 'createdon'
                      if(!isset($sortBy)){
                          $sortBy = 'createdon'; // default in NewsListing-snippet
                      }
                      
                      # Sort items How? 'ASC' or 'DESC'
                      if(!isset($sortHow)){
                          $sortHow = 'ASC'; // default in NewsListing-snippet
                      }
                      
                      # Ancor for links. 'longtitle' or 'pagetitle'
                      if(!isset($linkAncor)){
                          $linkAncor = 'pagetitle'; // default by 'pagetitle'
                      }
                      
                      //
                      // The code:
                      //
                      
                      // Get the parent ID
                      $parentid = $modx->documentObject['parent']; // maybe this solves it all, but I'm not sure.
                      
                      // (re)set the $id variable to the one of this document.
                      $id = $modx->documentIdentifier;
                      
                      // select the other members in this folder -- See: NOTE 1
                      $fields='id,pagetitle,longtitle,introtext,isfolder'; // what fields do you want to know
                      $children = $etomite->getActiveChildren($parentid, $sortBy, $sortHow, $fields);
                      
                      // the number of selected documents
                      //$limit = $modx->recordCount($children);
                      $limit = count($children);
                      
                      // set $y to zero
                      $y = 1;
                      
                      // sorting the documents, giving them a sequential and searchable index
                      foreach ($children as $child) {
                          $my_array[$y] = $child;
                          if ($my_array[$y]['id']==$id) {
                              $current=$y; // The current page has number $y in the array
                          }
                          $y++;
                      }
                      
                      $next = $current+1;
                      $nexttwo = $current+2;
                      $nexthree = $current+3;
                      
                      // ### Construction oh the elements
                      
                      // Next item
                      if($next <= $limit){
                      	$PJN_nextPlaceHolder ="<a href='[~".$my_array[$next]['id']."~]'>".$my_array[$next][$linkAncor]."</a>."." ".$my_array[$next]['introtext'];
                      } elseif($next > $limit) {
                      	$PJN_nextPlaceHolder = "<a href='[~".$my_array[$current-3]['id']."~]'>".$my_array[$current-3][$linkAncor]."</a>."." ".$my_array[$current-3]['introtext'];
                      }
                      
                      // Nexttwo item
                      if($nexttwo <= $limit){
                      	$PJN_nextdvaPlaceHolder ="<a href='[~".$my_array[$nexttwo]['id']."~]'>".$my_array[$nexttwo][$linkAncor]."</a>."." ".$my_array[$nexttwo]['introtext'];
                      } elseif($nexttwo > $limit) {
                      	$PJN_nextdvaPlaceHolder = "<a href='[~".$my_array[$current-2]['id']."~]'>".$my_array[$current-2][$linkAncor]."</a>."." ".$my_array[$current-2]['introtext'];
                      }
                      
                      // Nextthree item
                      if($nexthree <= $limit){
                      	$PJN_nexttriPlaceHolder ="<a href='[~".$my_array[$nexthree]['id']."~]'>".$my_array[$nexthree][$linkAncor]."</a>."." ".$my_array[$nexthree]['introtext'];
                      } elseif($nexthree > $limit) {
                      	$PJN_nexttriPlaceHolder = "<a href='[~".$my_array[$current-1]['id']."~]'>".$my_array[$current-1][$linkAncor]."</a>."." ".$my_array[$current-1]['introtext'];
                      }
                      
                      // #### Output commputing modded by Oncleben31
                      
                      	// Here starts the output
                      	$output = "";
                      	$output .= "<div id='NextThree'>";
                      	$output .= "<div class='tpn'>".$PJN_nextPlaceHolder."</div><br />";
                      	$output .= "<div class='tpn'>".$PJN_nextdvaPlaceHolder."</div><br />";
                      	$output .= "<div class='tpn'>".$PJN_nexttriPlaceHolder."</div>";
                      	$output .= "</div>";
                      	
                      	return $output;
                      ?>


                      2. В шаблоне для статей в место вывода ссылок на соседние страницы вставляете
                       [[TwoPrevNext? &sortBy=`menuindex` &sortHow=`ASC`]]



                      Можно выбрать по чем сортировать и порядок сортировки.

                      Производится вывод 3 следующих статей, если они существуют или 3 предыдущих, если следующих нет...
                      Кроме ссылки на соседнюю статью производится вывод и аннотации этой статьи.

                      В общем ройтесь в коде... и меняйте его под ваши нужды.

                      О том, как это работает можно посмотреть на любой внутренней странице сайта о садоводстве, ландшафтном дизайне и растениях

                      Кстати, под ваши цели подходит и сам PrevJumpNext v0.3