gpt4 book ai didi

php - laravel 5.1 中的多级菜单 - 循环

转载 作者:行者123 更新时间:2023-11-28 06:45:34 25 4
gpt4 key购买 nike

我对 laravel 5.1 框架有点陌生。最近几天,我为要创建的动态菜单创建了数据库(插入、更新、删除)。我连接我放置菜单的默认布局。从路由代码看起来像这样。

View::composer('layouts.default',function($view){
$menus = Menu::where('parent_id',0)->orderBy('order')->get();
$submenus = Menu::where('parent_id','!=',0)->get();
$view->with(compact('menus','submenus'));
});

在主菜单中,parent_id = 0 的元素。子菜单项的 parent_id = id,依此类推。

我想正确显示,但是当我将鼠标悬停在没有元素的主菜单项上时,会出现 css block ,因为我没有做好 if 条件。有什么办法吗?

View 中的代码如下所示。

@foreach($menus as $menu)
<li class="dropdown {!! (Request::is('typography') || Request::is('advancedfeatures') || Request::is('grid') ? 'active' : '') !!}"><a href="#" class="dropdown-toggle" data-toggle="dropdown"> {!! $menu->title !!}</a>
<ul class="dropdown-menu" role="menu">
@foreach($submenus as $submenu)
@if($submenu->parent_id === $menu->id)
<li><a href="{{ URL::to('typography') }}">{!! $submenu->title !!}</a>
@foreach($submenus as $smenu)
@if($smenu->parent_id === $submenu->id)
<ul class="dropdown-submenu" role="menu">
<li><a href="{{ URL::to('typography') }}">{!! $smenu->title !!}</a>
</li>
</ul>
@endif
@endforeach
</li>
@endif
@endforeach
</ul>
</li>
@endforeach

还有一个问题是如何从菜单模型中只取一个值,例如id,它只能用于指向一个子菜单。

最好的问候!

最佳答案

您可以简单地使用递归来完成。为了便于阅读,我删除了 html 类。

注意:为根项设置 NULL parent_id。

将此关系添加到您的菜单模型。

function childs()
{
return $this->hasMany('Namespace\Menu','parent_id', 'id');
}

在您的 Controller 中获取没有父项的菜单。

  $menus = Menu::whereNull('parent_id')->orderBy('order')->get();

然后将它们显示在您的 View 中。

<ul>
@foreach($menus as $menu)
<li>
{!! $menu->title !!}
@include('childItems')//recursion view
</li>
@endforeach
</ul>

这就是您的 childItems.blade.php 的样子。

 <ul>
@foreach($menu->childs as $menu)
<li>
{!! $menu->title !!}
@include('childItems')//call itself for deeper relations.
</li>
@endforeach
</ul>

就是这样。

关于php - laravel 5.1 中的多级菜单 - 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34068753/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com