2016-08-20 3 views
0

У меня есть родительская дочерняя система. Я пытаюсь создать трехуровневое меню, но меню первого уровня продолжает повторяться на всех трех уровнях.Три уровня мега-меню в PHP и MySQL

Вот выборочные данные моей таблицы базы данных

id category       parent 
1 level a one       0 
2 level b one       0 
3 level two 1 for a      1 
4 level two 2 for a      1 
5 level three for level two 1 for a 3 

PHP код:

<?php 
    include("core/functions.php"); 
?> 

<div id="magik-verticalmenu" class="block magik-verticalmenu"> 
    <div class="nav-title"> <span>Categories</span> </div> 
     <div class="nav-content"> 
      <div class="navbar navbar-inverse"> 
       <div id="verticalmenu" class="verticalmenu" role="navigation"> 
<?php 
$sql = "SELECT * FROM category WHERE parent = 0"; 
$pquery = $con->query($sql);  
?> 
        <div class="navbar"> 
         <div class="collapse navbar-collapse navbar-ex1-collapse"> 
          <ul class="nav navbar-nav verticalmenu"> 
<?php 
while($parent = mysqli_fetch_assoc($pquery)): 
?>     
<?php 
    $parent_id = $parent['id']; 
    $sql2 = "SELECT * FROM category WHERE parent = 'parent_id'"; 
    $cquery= $con->query($sql2); 
?> 
    <li class=" parent dropdown "> 
     <a href="grid.html" class="dropdown-toggle" data-toggle="dropdown"> 
      <span class="menu-title"> 
<?php 
    echo $parent ['category']; 
?> 
      </span><b class="round-arrow"></b> 
     </a> 
     <div class="dropdown-menu"> 
      <div class="dropdown-menu-inner"> 
       <div class="row"> 
        <div class="mega-col col-sm-66" data-widgets="wid-5" data-colwidth="6"> 
         <div class="mega-col-inner"> 
          <div class="ves-widget"> 
<?php 
    while($child = mysqli_fetch_assoc($cquery)): 
?> 
<?php 
     $parent_id = $parent['id']; 
     $sql3 = "SELECT * FROM category WHERE parent = 'parent_id'"; 
     $squery= $con->query($sql3); 
?> 
           <div class="menu-title"> 
<?php 
     echo $child ['category']; 
?> 
           </div> 
<?php 
    endwhile; 
?> 
           <div class="widget-html"> 
            <div class="widget-inner"> 
             <ul> 
<?php 
    while($child = mysqli_fetch_assoc($squery)): 
?>  
              <li class="first"> 
               <a href="grid.html"> 
                <span> 
<?php 
     echo $child ['category']; 
?> 
                </span> 
               </a> 
              </li> 
<?php 
    endwhile; 
?>    
             </ul> 
            </div> 
           </div> 
          </div> 
         </div> 
        </div> 
       </div> 
      </div> 
     </div> 
    </li> 
<?php 
endwhile; 
?>  
          </ul> 
         </div> 
        </div> 
       </div> 
      </div> 
     </div> 
    </div> 
+0

Ваш первый запрос предполагает, что столбец 'parent' является целым числом, но ваши следующие два запроса (которые идентичны кстати) предполагают, что это строка. Что он? Я предполагаю, что одна из этих двух дает ошибку. – David

+0

родительский столбец задан как целочисленный ... так что догадываюсь, что последние два вопроса влияют на мои результаты ... ОК, попробуйте и c –

+0

NB: уровень вложенности ваших тегов 'div' огромен: кажется преувеличенным. – trincot

ответ

0

Вы можете сделать это с помощью этого решения:

function makeTree($data = [], $key = 'id', $parent_key = 'parent_id', $node_name = 'childs', $parent_code = 0) { 

    $parent_ids = array_column($data, $parent_key); 
    $result = []; 
    foreach ($data as $k=>$v) { 
     if($v[$parent_key] == $parent_code){ 
      $result[$v[$key]] = $v; 
      if(in_array($v[$key], $parent_ids)){ 
       result[$v[$key]][$node_name] = makeTree($data, $key , $parent_key, $node_name, $v[$key]); 
      } 
     } 
    } 
    return $result; 
} 

Пример:

$data =[['id'=>1, 'parent_id'=>0,'name'=>'first'], 
    ['id'=>2, 'parent_id'=>0,'name'=>'second'], 
    ['id'=>3, 'parent_id'=>1,'name'=>'third'], 
    ['id'=>4, 'parent_id'=>3,'name'=>'four'], 
    ['id'=>5, 'parent_id'=>2,'name'=>'five'], 
    ['id'=>7, 'parent_id'=>9,'name'=>'five'], 
    ['id'=>8, 'parent_id'=>2,'name'=>'five'], 
    ['id'=>9, 'parent_id'=>2,'name'=>'five'], 
    ['id'=>10, 'parent_id'=>9,'name'=>'five'], 
    ['id'=>6, 'parent_id'=>1,'name'=>'six']]; 

$result = makeTree($data, 'id', 'parent_id', 'sub', 0); 

Run Example

0

да .. используя только одну таблицу было трудно для меня, чтобы создать отношения ... так что я добавил еще больше двух таблиц. по одному для каждого уровня и создания отношений. это полностью решило мою проблему. все равно спасибо .. если кто-нибудь клещ быть заинтересован в коде .. я буду радо поделиться .. justcomment

+0

Пожалуйста, добавьте код в свой ответ, чтобы он мог помочь другим людям, читающим этот ответ. – ekad

0
<div class="col-md-12 col-sm-12"> <a class="logo" title="" href="index.html" style="margin-top:5px"><img alt="" src="images/logo.png"></a> </div> 
      <div class="col-md-12 col-sm-12"><div class="-dropdown-wrapper"> 
      <a class="dropdown-trigger" href="#0">Categories</a> 
      <nav class="dropdown"> 
       <h2>Title</h2> 
       <a href="#0" class="close">Close</a> 
      <?php 
//parent loop - menu1  
    $sql = "SELECT * FROM menu1"; 
    $pquery = $con->query($sql);  
     ?>  
     <ul class="dropdown-content"> 
    <?php 

while($parent = mysqli_fetch_assoc($pquery)): 
     ?> 


     <?php //level 1 menu 
    $cquery=$con->query("SELECT * FROM menu2 WHERE menu1_id=".$parent['id']); 
     ?> 

        <li class="has-children"> 
         <a href=""><?=$parent ['category']; 
     ?></a> 

         <ul class="secondary-dropdown is-hidden" style=" background:url(<?=$parent ['background']; 
     ?>); background-position:bottom right; background-repeat:no-repeat; background-color:#FFF"> 
       <?php 
     while($level1=$cquery->fetch_array()):?>   
          <li class="go-back"><a href="#0">Menu</a></li> 
          <li class="see-all"><a href=""><?='See all'.' '.$parent ['category']; 
     ?></a></li> 
          <li class="has-children"> 
           <a href=""><?=$level1['category']; ?></a> 
      <?php 
      //level 2 menu starts 
     $squery=$con->query("SELECT * FROM menu3 WHERE menu2_id=".$level1['id']); 

      ?> 
           <ul class="is-hidden"> 
            <li class="go-back"><a href="#0">Clothing</a></li> 
      <?php 
     while($level2=$squery->fetch_array()):?>      
            <li class=""> 
             <a href="category.php?cat=<?=$level2['id']; ?>"><?=$level2['category']; ?></a> 


            </li> 
      <?php endwhile; ?>      

           </ul> 
          </li> 
    <?php endwhile; ?> 
         </ul> <!-- -secondary-dropdown --> 
       <?php endwhile; // parent endwhile ?> 

MEN1 идентификатор категория 1 Footware 2 одежды

menu2 ID menu1_id категории 1 1 обувных 2 2 платья -2 брюки

menu3

идентификатор menu1_id menu2_id категории

1-1 шнурки для обуви -3 2 кнопки

нужна помощь в форматировании таблицы PLS .. но в стороне от того, что является его ... Я также добавил фона в главном меню категория.

Смежные вопросы