Laravel 4 のメニューで無限の深さを得る方法を実装しました。それはまさにあなたが求めるものではありませんが、テクニックは簡単に適応できるはずです。
手始めに、私のメニューはマスター ビューに割り当てられる単なる配列 (今のところ) であり、次のようになります。
$menu = array(
array(
'name' => 'item1',
'url' => '/'
),
array(
'name' => 'item2',
'url' => '/',
'items' => array(
array(
'name' => 'subitem1',
'url' => '/'
),
array(
'name' => 'subitem2',
'url' => '/'
)
)
)
);
モデルを使用することで、この構造を簡単に実現できます。child_items
メニューを下からではなく上から下にレンダリングするため、関数または何かが必要になります。
マスター ブレード テンプレートで、次のようにします。
<ul>
@foreach ($menu as $item)
@include('layouts._menuItem', array('item' => $mainNavItem))
@endforeach
</ul>
そして、layouts._menuItem
テンプレートでこれを行います:
<?php
$items = array_key_exists('items', $item) ? $item['items'] : false;
$name = array_key_exists('name', $item) ? $item['name'] : '';
$url = array_key_exists('url', $item) ? url($item['url']) : '#';
$active = array_key_exists('url', $item) ? Request::is($item['url'].'/*') : false;
?>
<li class="@if ($active) active @endif">
<a href="{{ $url }}">{{ $name }}</a>
@if ($items)
<ul>
@foreach ($items as $item)
@include('layouts._menuItem', array('item' => $item))
@endforeach
</ul>
@endif
</li>
ご覧のとおり、このテンプレートは自分自身を再帰的に呼び出しますが、別の$item
変数を使用しています。これは、メニュー構造を好きなだけ深くすることができることを意味します。(php ブロックはいくつかの変数を準備するためにあるだけなので、実際のテンプレート コードをクリーンで読みやすい状態に保つことができます。技術的には必須ではありません)。
上記のスニペットの Twitter Bootstrap コードを単純化するために削除したため (実際には、テンプレート/配列にタイトル、ドロップダウン トグル、アイコン、仕切りなどがあります)、コードはテストされていません。ただし、フルバージョンは私にとっては問題なく機能しているので、どこかで間違いを犯した場合はお知らせください.
これが途中であなた(または他の誰か、これはかなり古い質問であるため)に役立つことを願っています. さらにポインタ/ヘルプが必要な場合、または私の完全なコードが必要な場合はお知らせください。
ハッピーコーディング!