我實現了一個辦法讓無盡在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代碼,以使事情變得簡單(實際上我有模板/數組中的標題,下拉切換,圖標,分隔符等),所以代碼未經測試。儘管如此,完整版仍然適合我,所以讓我知道我是否在某個地方犯了錯誤。
希望這可以幫助你(或其他人,因爲這是一個相當古老的問題)的道路上。讓我知道你是否需要更多的指針/幫助,或者如果你想要我的完整代碼。
快樂編碼!
看起來像我需要使用數據透視錶針對這種情況 – Hello 2013-05-04 22:07:39
你確定你是試圖讓該菜單項有一個父? 「試圖獲得非對象的屬性」表明沒有'parent_menu'可用。 – 2013-05-05 17:12:33
在這裏發佈此爲來自搜索的人http://heera.it/laravel-model-relationship – Jarry 2014-09-11 18:50:07