簡體   English   中英

Laravel 5.1中的多級菜單-循環

[英]Multi-level menu in laravel 5.1 - loops

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

另一個問題是如何從菜單模型中僅獲取一個值,例如只能用於指向一個子菜單的id

最好的祝福!

您可以簡單地通過使用遞歸來做到這一點。 我刪除了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>

而已。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM