0

私はその子と孫と一緒にメニューを表示したい出力はこのようになります

-子

-孫

親 1

-子

私のMenuItemsControllerのheres私の関数

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にあります

<?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 とは関係ありません。ただし、メニューがデータベースに保存されている場合は、ツリー動作を使用して DB からメニューを取得できますが、それでもビューに渡す必要があります。それを表示する関数を作成します

お役に立てれば

于 2012-07-13T15:56:35.813 に答える