2013-08-24 43 views
0

我試圖使用codeigniter創建多級菜單 這些是我用來回顯菜單的兩個函數。我需要使用codeigniter創建動態多級菜單

function loop_array($array = array(), $parent_id = 0) { 
    if (!empty($array[$parent_id])) { 
    // echo '<ul>'; 
     foreach ($array[$parent_id] as $items) { 
      echo '<li><a class = "parent"><span>'; 
      echo $items['label']; 
      echo '</span></a>'; 
      loop_array($array, $items['id']); 
      echo '</li>'; 
     } 
     echo '</ul>'; 
    } 
} 

function display_menus($menu_items) { 
// var_dump($menu_items); 
    $array = array(); 
    foreach ($menu_items as $rows) { 
     $array[$rows['parent']][] = $rows; 
    } 
    loop_array($array); 
} 

然後放出來的html代碼就像

<div id='Mymenu' style=' color: #000; width: 960px; background-image:url(); clear: both; text-align: center; height: 46px;'> 
    <div id="menu"> 
     <ul class="menu"> 
      <li><a class = "parent"><span>Home</span></a></li><li><a class = "parent"><span>Code</span></a><li><a class = "parent"><span>PHP</span></a><li><a class = "parent"><span>Scripts</span></a><li><a class = "parent"><span>Archive</span></a><li><a class = "parent"><span>Snippet</span></a></li></ul></li></ul></li><li><a class = "parent"><span>Help</span></a></li></ul></li><li><a class = "parent"><span>CSS</span></a></li></ul></li><li><a class = "parent"><span>Contact</span></a></li></ul>  </ul> 
    </div> 
</div> 

,但我需要把這作爲

<div id='Mymenu' style=' color: #000; width: 960px; background-image:url(); clear: both; text-align: center; height: 46px;'> 
<div id="menu"> 
    <ul class="menu"> 
     <li><a href="index" class="parent"><span>HOME</span></a> 
      <div><ul> 
       <li><a href=""><span>Vertical Menu</span></a> 
       <li><a href=""><span>Slide show</span></a> 
     </li> 
     <li><a href="#" class="parent"><span>ABOUT US</span></a></li> 
     <li><a href="news"><span>NEWS</span></a></li> 
     <li class="last"><a href="#"><span>ACADEMICS</span></a></li> 
     <li class="last"><a href="#"><span>PROGRAMME</span></a></li> 
     <li class="last"><a href="#"><span>ADMISSIONS</span></a></li> 
     <li class="last"><a href="courses"><span>COURSES</span></a></li> 
     <li class="last"><a href="contact_us"><span>CONTACT US</span></a></li> 
     <li class="last"><a href="feedback"><span>Feedback</span></a></li> 
    </ul> 
</div> 

誰能給我一個辦法做到這一點?

+0

是不是你缺少$ this->當調用這些函數? – DeiForm

回答

1

請注意,您的目標代碼是錯誤的HTML開始(不是封閉的HTML標籤),我不知道它是否真的是你需要或想要的,即它是否真的是最終的正確形式?

此外,如果您清楚地闡述問題並使代碼具有可讀格式(而不是一行),其他人就不會浪費時間來理解您想要的內容。

我假設你有一個樹狀/多級菜單,你想打印出內部節點(即有孩子的節點,或「父母」)和終端節點(即你的「最後」元素)之間的區別。

您的* display_menus *函數通過其父菜單ID對菜單項進行分組,並且看起來正確。

你* loop_array *功能似乎是幾乎沒有:

function loop_array($array = array(), $parent_id = 0) 
{ 
    if (!empty($array[$parent_id])) 
    { 
     echo "\n<ul>"; 
     foreach ($array[$parent_id] as $items) 
     { 
      // is it a terminal node? 
      if (empty($array[$items['id']])) 
      { 
       $class = 'last'; 
      } 
      else 
      { 
       $class = 'parent'; 
      } 

      // is there a link? 
      if (empty($items['my-link-field'])) 
      { 
       $link = '#'; 
      } 
      else 
      { 
       $link = $items['my-link-field']; 
      } 

      // if you do not divide your output string into several statements, 
      // the code becomes more readable 
      // I mean 
      // it 
      //       feels 
      //   like 
      //     several 
      // fragments 
      //   that 
      //      must 
      // be seen, understood and put into context. Which -in any language- is just easier with a nice flow. 

      echo "<li><a class='{$class}' href='{$link}'><span>{$items['label']}</span></a>"; 

      loop_array($array, $items['id']); 

      echo "</li>\n"; 
     } 
     echo "</ul>\n"; 
    } 
} 

如果你還沒有得到想要的結果,我會假設你的數據($ menu_items)是不正確的設置。由於您似乎已經檢查過(註釋過var_dump),您可能需要檢查傳遞給loop_array的數據,即$ array。