0

我想用他们的孩子和孙子显示菜单输出将是这样的

家长

-孩子

-孙子

家长 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;

    }

继承人在我的视图元素 app\view\elements\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>
4

1 回答 1

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无关..但是,如果您的菜单存储在数据库中,也许您可​​以使用树行为从数据库中检索菜单,但是您仍然需要将其传递给视图并创建一个函数来显示它

希望这可以帮助

于 2012-07-13T15:56:35.813 回答