2011-01-09 64 views
0

我有一個從數據庫中獲取標題動態生成的菜單。我通過添加一列p_id爲子頁面設置了相同的表格。我的代碼看起來像這樣。如何解決Codeigniter中的動態多重下拉菜單問題?

private $Section = array(); 
function _menu($root){ 

    $this->db->select('id,title,p_id'); 

    $this->db->Where('p_id',$root); 

    $this->db->Where('status','active'); 

    $this->db->Where('type','page'); 

    $this->db->order_by('sort'); 

    $query = $this->db->get('pages'); 

    foreach ($query->result() as $row) 

    { 

     $this->Section[] = '<ul>'; 

      $this->Section[] = '<li>'; 

      $this->Section[] = anchor('site/page/'.$row->id.'#cont_main',$row->title); 

      $this->_menu($row->id); 

      $this->Section[] = '</li>'; 

     $this->Section[] = '</ul>'; 

    } 



    $query->free_result(); 

    return $this->Section; 

} 



//get menu tree  

function MenuTree(){ 

    return $this->_menu(0); 

} 

在上述_menu()如果資產淨值有兩個或兩個以上的孩子那麼它不顯示,因爲它填充源提供額外</ul> and <ul>。源看起來像這樣

<ul> 
<li><a href="#">menu 1</a> 
    <ul> 
     <li><a>menu 1 sub1</a></li> 
    </ul> 
    <ul> 
     <li><a>menu 1 sub2</a></li> 
    </ul> 
</li> 

而我假設得到:

<ul> 
<li><a href="#">menu 1</a> 
    <ul> 
     <li><a>menu 1 sub1</a></li> 
     <li><a>menu 1 sub2</a></li> 
    </ul> 
</li> 

編輯 我照着子元素添加菜單。圖像進入所有沒有孩子的菜單,因爲額外的<ul></ul>如果我在循環之前使用ul。源代碼看起來像這樣。

<ul> 
<li><a href="#">menu 1</a> 
    <ul> 
     <li><a>menu 1 sub1</a> 
      <ul></ul> 
     </li> 
     <li><a>menu 1 sub2</a></li> 
    </ul> 
</li> 

任何想法將是明顯的。

+0

你爲什麼使用MVC框架? – jondavidjohn 2011-01-09 22:04:30

回答

0

您需要在foreach循環外部添加您的ul並確保您已經有結果!

if ($query->num_rows() > 0) { // we actually have results, open a UL and loop to add the LIs 
    $this->Section[] = '<ul>'; 
    foreach ($query->result() as $row) { 
0

您正在使用

foreach ($query->result() as $row) { 
    $this->Section[] = '<ul>'; 

,因爲它會爲其中的每個元素當然是始終顯示的ul。您需要放置

$this->Section[] = '<ul>'; 

並且它在循環外部關閉塊。如果你希望它只在有多個父項時才觸發,那麼一個IF語句會檢查這個並據此作出相應的反應。


問題依然存在,似乎是ul的擺放位置。你可以做

function MenuTree() { 
    return "<ul>" . $this->_menu(0) . "</ul>"; 
} 

並從上面完全刪除提到的ul,以獲得內部循環。

+0

請檢查我編輯後,我使用循環前ul。 – kamal 2011-01-09 16:18:31