Cake PHP父/子/孙子菜单

时间:2012-07-12 08:35:04

标签: cakephp menu

我想与他们的孩子和大孩子一起显示菜单 输出将是这样的

柴尔德

-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>

1 个答案:

答案 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从数据库中检索菜单,但是您仍然需要将它传递给视图并创建一个显示它的函数

希望这有帮助