2012-07-12 71 views
0

我想顯示他們的孩子和孫子菜單 輸出會是這樣蛋糕PHP父/子/孫子菜單

家長

柴爾德

-grandchildren

父1

-child

我的繼承人,我MenuItemsController

public function buildTree($arr, $parent_id = 0) { 
    $op=array(); 
    foreach ($arr as $item){ 
    if ($item['parent_id']== $parent_id){ 
         $op[$item['id']]=array('name'=>$item['name'],'parent'=>$item['parent_id'] 
    ); 
      $children=buildtree($arr,$item['id']); 
      if (children) { 
      $op[$item['id']]['parent_id'] =$children;                                                            

      } 
      } 
     } 

     return $op; 

    } 

繼承人在我的視圖元素的應用程序\圖\元素功能\ navigation.ctp

<?php 
    App::import('Controller', 'MenuItems'); 
    $menu_items = new MenuItemsController(); 

?> 

<ul id="navigation"> 
<?php 
foreach($mainMenuItems as $item) { 
echo "<li>".$item['MenuItem']['name']."</li>"; 
$child=$menu_items->buildsubmenus($item['MenuItem']['id']); 
      pr($child); 
} 

?> 
</ul> 
+1

您正在將控制器導入視圖?!?!?! o_O ..是的..無論如何誰還需要MVC? – pleasedontbelong 2012-07-12 09:45:57

+0

你將如何接近它? – 2012-07-13 03:19:48

+0

控制器應該將數據傳遞到視圖中,視圖應儘可能清潔。如果你需要一個函數在你的視圖中創建一個助手,並且如果你需要在控制器中調用一個函數(但你不需要),你可以在視圖 – pleasedontbelong 2012-07-13 08:13:56

回答

0

你的控制器需要生成樹並把它傳遞給視圖。如何生成它?這取決於你的應用程序,也許你需要調用數據庫,也許它只是一個靜態數組等

你需要創建自己的格式爲樹,例如:

Array 
(
    [0] => Array 
     (
      [0] => child 11 
      [1] => Array 
       (
        [0] => grandchild 121 
        [1] => grandchild 122 
       ) 

     ) 

    [1] => parent 2 
    [2] => Array 
     (
      [0] => child 31 
     ) 

) 

然後你可以將它傳遞給視圖並循環數組來創建菜單。要做到這一點,你可以使用遞歸函數來顯示陣列..或者如果你知道不會超過3級,你可以簡單地使用3 for

=)所以這與cakephp無關。但是,如果您的菜單存儲在數據庫中,也許可以使用 tree behaviour從數據庫中檢索菜單,但是您仍然需要將其傳遞到視圖並創建一個函數以顯示它

Hope這有助於

+0

但我的數據庫沒有離開右邊的字段 – 2012-07-14 04:34:02

+0

是啊我所有的菜單是從數據庫中,它沒有左右字段 – 2012-07-14 04:37:10