We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 10509
    • 21 Posts
    Здравствуйте,

    Хотел сделать верхнее меню с использованием сниппета, упомянутого здесь: http://modx.ru/blog/modx-programming-top-menu/

    Код сниппета:
    <?php
    $results = $modx-> getDocumentChildren (
        $id = 0, 
        $active = 1, 
        $deleted = 0, 
        'id, pagetitle, published, menuindex, deleted, hidemenu, menutitle', 
        $where = 'hidemenu = 0', 
        $sort='menuindex', 
        $dir='ASC', 
        $limit
    );
     
    $cid = $modx->documentIdentifier;
     
    $items = "";
    $output = "";
    
    foreach($results as $key => $value) {
        if ($value["id"] == $cid) {
            $active = " class=\"navactive\"";
            }
        else {
            $active = "";
    	}
        $items .= "<li>
        <a href=\"[~".$value["id"]."~]\" ".$active." title=\"".$value["pagetitle"]."\">".$value["pagetitle"]."
        </a></li> \n";
    }
    if ($items != "") {
        $output = "<ul>\n";
        $output .= $items;
        $output .= "</ul>\n";
    }
     
    return $output;
    ?>


    Сниппет выводит html:
    <ul>
    <li><a href="index" class="navactive" title="Главная">Главная</a></li> 
    <li><a href="about" title="О проекте">О проекте</a></li> 
    <li><a href="works" title="Галерея">Галерея</a></li> 
    <li><a href="services" title="Работы">Работы</a></li> 
    <li><a href="blog" title="Блог">Блог</a></li> 
    <li><a href="contacts" title="Контакты">Контакты</a></li> 
    </ul>


    В конце концов хотел сделать такой вывод:

    <ul>
    <li><a href="index" class="navactive" title="Главная">Главная</a></li>
    <li><a href="about" title="О проекте">О проекте</a></li>
    </ul>
    <ul>
    <li><a href="works" title="Галерея">Галерея</a></li>
    <li><a href="services" title="Работы">Работы</a></li>
    </ul>
    <ul>
    <li><a href="blog" title="Блог">Блог</a></li>
    <li><a href="contact" title="Контакты">Контакт</a></li>
    </ul>
    


    Самостоятельные потуги по правке php сниппета к удовлетворительному результату не привели - выводится как угодно, только не так, как задумано sad

    Прошу помощи сообщества smiley

    This question has been answered by kp52. See the first response.

    • discuss.answer
      • 16278
      • 928 Posts
      Если хотите вывести ссылки по парам, легче использовать массив для подбора и обработки данных, чем наращивать текст.

      <?php
      $results = $modx-> getDocumentChildren (
          $id = 0,
          $active = 1,
          $deleted = 0,
          'id, pagetitle, published, menuindex, deleted, hidemenu, menutitle',
          $where = 'hidemenu = 0',
          $sort='menuindex',
          $dir='ASC',
          $limit
      );
        
      $cid = $modx->documentIdentifier;
        
      $items = array();    ////// внимание!   //////
      $output = "";
       
      foreach($results as $key => $value) {
          if ($value["id"] == $cid) {
              $active = " class=\"navactive\"";
              }
          else {
              $active = "";
          }
          ////// внимание!   //////
          $items[] = "<li>
          <a href=\"[~".$value["id"]."~]\" ".$active." title=\"".$value["pagetitle"]."\">".$value["pagetitle"]."
          </a></li> \n";
      }
      
      $output = "";
      
      while ($nextItem = array_shift($items)) {
          $output .= "<ul>\n";
      	$output .= $nextItem;
      	$output .= array_shift($items);
          $output .= "</ul>\n";	
      }
      
        
      return $output;
      ?>


      Еще лучше использовать чанк с плейсхолдерами вместо сложной строки для тэгов <li>. Задачу подставки выполняет функция $modx->parseChunk. Уже есть готовый аргумент в массиве $value, нужно только прибавить элемент $value['active'].

      Чанк menuItem:
      <li><a href="[~[+id+]~]" [+active+] title="[+pagetitle+]">[+pagetitle+]</a></li>
      


      Изменения в сниппете:
      foreach($results as $key => $value) {
          if ($value["id"] == $cid) {
              $value['active'] = " class=\"navactive\"";
              }
          else {
              $value['active'] = "";
          }
      
          $items[] = $modx->parseChunk('menuItem', $value, '[+', '+]');
      }
      


      :) KP
        • 10509
        • 21 Posts
        kp52, все работает. Огромное спасибо! smiley



        В приложении - скрин требовавшегося вывода. [ed. note: Gaspasser last edited this post 13 years, 10 months ago.]