2017-10-04 6 views
0

に階層データテーブルを表示します。は、私は以下のようにツリービューのデータテーブルを作成したPHPのCodeIgniterのメニューツリービュー

id | parent_id | name 
1  null  Japan 
2  1   Tokyo 
3  2   Nerima 
4  2   Chiyoda 
5  null  America 
6  5   New York 
7  5   Washington 

は、私がデータを取得し、ツリーメニューで表示します。ここに私のhtmlコードは次のとおりです。

<ul class="sidebar-menu">                       
    <li class="treeview"> 
      <a href="#"> 
       <i class="fa fa-institution"></i> 
       <span>Japan</span> 
      </a> 
      <ul class="treeview-menu"> 
       <li> 
        <a>Tokyo</a> 
        <ul class="treeview-menu"> 
         <li><a>Nerima</a></li> 
         <li><a>Chiyoda</a></li> 
        </ul> 
       </li> 
      </ul> 
    </li> 
    <li class="treeview"> 
      <a><span>America</span></a> 
      <ul class="treeview-menu"> 
       <li><a>New York</a></li> 
       <li><a>Washington</a></li>       
      </ul> 
    </li> 
</ul> 

そして、これは私のクエリのコードです:

$query = "SELECT * FROM menu_tree WHERE parent_id='".$parent_id."' ORDER BY name"; 

私はいくつかの研究をしましたが、期待されるメニューツリーにデータ配列を表示するための方法を見つけることができませんでした。私はそれを行うことができる解決策はありますか?

答えて

0

いくつかの調査をした後、私は解決策を見つけました。 この機能を呼び出すと、予想されるメニューが表示されます。 同じ問題に直面している人のために。

function build_menu($rows,$parent) 
    { 
     $temp = "<ul class=\"treeview-menu\">"; 
     $result = ""; 
     foreach ($rows as $row) 
     { 
      if ($row['parent_id'] == $parent){ 

       $result.= "<li class=\"treeview\"><a href=" . site_url('admin/dashboard?id=') . $row['id'] ."><span>{$row['name']}</span></a>"; 
       if ($this->has_children($rows,$row['id'])) 
        $result.= $temp . $this->build_menu($rows,$row['id']);     
      } 
     } 
     $result.= "</ul>"; 

     return $result; 
    } 
    function has_children($rows,$id) 
    { 
     foreach ($rows as $row) { 
      if ($row['parent_id'] == $id) 
      return true;    
     } 
     return false; 
    } 
} 

そして、これは、ビューファイル内のコードです:

<ul class="sidebar-menu">   
    <?php echo $CI->menu_tree->build_menu($menu_tree,0);?>                               
</ul> 
関連する問題