我实现了一个办法让无尽在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