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

标签 php css foreach menu laravel-5.1

我对 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/

相关文章:

php - 如何将json数据保存到mysql?

php - fpdf 单元格未正确显示连接的 php 字符串

html - Bootstrap nav nav-pills ruby​​ on rails,不切换

PHP 分层数组 - 检查子值是否存在,然后将父属性值分配给其子数组

scala - 为什么 foreach 对于带有 toUpperCase 的字符串类型列表失败?

java - 如何使用改进的 Java 8 迭代迭代和处理映射键/值

php - 与远程服务器的PHP PDO连接改为连接到本地服务器

php - "Notice: Undefined variable"、 "Notice: Undefined index"、 "Warning: Undefined array key"和 "Notice: Undefined offset"使用 PHP

html - 按中位数对齐文本

html - 资源管理器和 Chrome 中的 div 宽度太大