【问题标题】:Multi-level menu in laravel 5.1 - loopslaravel 5.1 中的多级菜单 - 循环
【发布时间】:2016-03-08 05:30:48
【问题描述】:

我对 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 块,因为如果条件我没有做好。有没有办法做到这一点?

视图中的代码如下所示。

@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

还有一个问题是如何从 Menu model 中只取一个值,例如 id 可以用来指向一个子菜单。

最好的问候!

【问题讨论】:

    标签: php css foreach menu laravel-5.1


    【解决方案1】:

    您可以简单地使用递归来做到这一点。为了便于阅读,我删除了 html 类。

    注意:为根项目设置 NULL parent_id。

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

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

    在您的控制器中获取没有父级的菜单。

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

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

    <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>
    

    就是这样。

    【讨论】:

      猜你喜欢
      • 2017-05-30
      • 2017-03-12
      • 1970-01-01
      • 1970-01-01
      • 2020-12-26
      • 2018-08-28
      • 2017-01-27
      • 2018-07-08
      • 2018-07-09
      相关资源
      最近更新 更多