За последние 24 часа нас посетили 21496 программистов и 1018 роботов. Сейчас ищет 691 программист ...

Цикл с середины где Level=n

Тема в разделе "PHP для новичков", создана пользователем ghostcom, 17 фев 2018.

Метки:
  1. ghostcom

    ghostcom Активный пользователь

    С нами с:
    17 фев 2016
    Сообщения:
    92
    Симпатии:
    2
    Такая загвоздка! Вывожу циклом меню с подменю. У каждого пункта есть `level` при выборе с первого пункта где level=1 все ок. Весь список с любым уровнем вложенности отображается нормально. Но когда нужно начать меню не с корневого уровня (например c level=3) ломает шаблон (не правильно закрываются теги ul, li и тд).
    Вот код
    PHP:
    1. <?php
    2.                 $level=0;
    3.                 foreach($this->categories as $n=>$category) :
    4.                
    5.                     if($category->level==$level)
    6.                         echo '</li>';
    7.                     else if($category->level>$level)
    8.                         echo '<ul>';
    9.                     else
    10.                     {
    11.                         echo '</li>';
    12.  
    13.                         for($i=$level-$category->level;$i;$i--)
    14.                         {
    15.                             echo '</ul>';
    16.                             echo '</li>';
    17.                         }
    18.                     }
    19.  
    20.                     echo '<li class="am_dox_category">';
    21.                     $level=$category->level; ?>
    22.                        
    23.                         <label for="cat_<?php echo $category->id; ?>">
    24.                             <?php
    25.                                 echo $category->title;
    26.                                 $countdocs = count($category->doc);
    27.                                 if ( $countdocs !== 0 ) {
    28.                                     echo '<span class="am_dox_countdocs">'.$countdocs.'</span>';
    29.                                 }
    30.                             ?>
    31.                         </label>
    32.                         <input id="cat_<?php echo $category->id; ?>" type="checkbox" />
    33.                         <div class="panel">
    34.                        
    35.                     <?php
    36.                         if ($category->doc):
    37.                             echo '<ul class="am_dox_docs">';
    38.                                 foreach ($category->doc as $doc) :
    39.                     ?>
    40.                                     <a href="<?php echo JRoute::_( 'index.php?view=doc&id='.$doc->id.':'.$doc->alias ); ?>">
    41.                                         <div class="am_dox_doc_link">
    42.                                             <?php echo $doc->title; ?>
    43.                                         </div>
    44.                                     </a>
    45.                     <?php
    46.                                 endforeach;
    47.                             echo '</ul>';
    48.                         endif;
    49.                     ?>
    50.                    
    51.                 <?php endforeach; ?>
    52.                
    53.             <?php
    54.                 for($i=$level;$i;$i--)
    55.                 {
    56.                     echo '</div></li></ul>';
    57.                 }
    58.             ?>
    Не ругайте за форматирование(кашу), пока в процессе)
     
  2. Poznakomlus

    Poznakomlus Активный пользователь

    С нами с:
    12 сен 2014
    Сообщения:
    96
    Симпатии:
    19
    Адрес:
    Киев
    если нужно меню не с корневого уровня, тогда выбирайте с данными условиями при запросе
     
  3. ghostcom

    ghostcom Активный пользователь

    С нами с:
    17 фев 2016
    Сообщения:
    92
    Симпатии:
    2
    Так и есть. Но левел жестко прописан в таблице! Таблица вида Nested Sets.
    Тема закрыта. Прописал пару условий и все встало на свои места!!!
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
    Эта технология придумана для того,чтобы сразу нужный уровень с подуровнями выбирать
     
  5. ghostcom

    ghostcom Активный пользователь

    С нами с:
    17 фев 2016
    Сообщения:
    92
    Симпатии:
    2
    Да вроде никто не спорит. Вопрос был по визуальному отображению.