2012-07-12 69 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