我想与他们的孩子和大孩子一起显示菜单 输出将是这样的
父
柴尔德
-grandchildren
家长1
柴尔德
继承我的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;
}
我的View Element app \ view \ elements \ navigation.ctp
上的Heres<?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>
答案 0 :(得分: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从数据库中检索菜单,但是您仍然需要将它传递给视图并创建一个显示它的函数
希望这有帮助