laravel中的动态菜单

时间:2016-01-07 09:05:54

标签: php laravel menu

我正在尝试创建动态菜单。基本上,我有两个表:类别和页面。不确定我应该怎么做但是以下是我尝试过的东西

<nav class="navbar navbar-inverse">
    <div class="container-fluid">
        <div class="navbar-header">
            <a class="navbar-brand" href="{{url('/',null)}}" class="pull-left">Consulate</a>
        </div>
    <div>
    <ul class="nav navbar-nav">
        <li class="active"><a href="{{url('/',null)}}">Home</a></li>
        @foreach($categories as $category )
        <li class="dropdown">
            <a  class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">{{$category->title}}<span class="caret"></span></a>
            <ul class="dropdown-menu">
            @foreach($pages as $page)
                <li><a href="{{action('publicpagecontroller@show',[$page->id])}}">{{$page->title}}</a></li>
            @endforeach
            </ul>
        </li>
        @endforeach

使用上面的代码,我在所有类别中都有相同的下拉菜单。只有在类别有页面时才需要下拉列表。 example1 example2

我的模型如下: 页面模型

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;

class Pages extends Model
{
    protected $fillable=[
        'title',
        'details',
        'image',
        'category_id',
    ];

    //A page has a category

    public function category()
    {
        return $this->belongsTo('App\Categories');
    }
}

类别模型

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;

class Categories extends Model
{
    protected $fillable=[
        'title',
        'details',
    ];
    public function pages()
    {
        return $this->hasMany('App\Pages');
    }
}

1 个答案:

答案 0 :(得分:1)

您可以将类别存储在名为categories(id,name,url)的数据库表中。然后,您还可以使用另一个名为pages的表(id,name,url,category_id)。

创建类别和页面模型。

定义一对多关系(一个类别到多个页面)。

然后你可以这样做:

@foreach( $categories as $category )
  <!-- display your category html -->

  @foreach( $category->pages as $page )
    <!-- display your page html -->
  @endforeach

@endforeach

了解Laravel中的一对多关系:Eloquent: Relationships - one-to-many