如何在Laravel 5中列出具有多级别类别的选择选项

时间:2015-08-24 11:24:10

标签: laravel-5

我有一个问题。在提出这个问题之前,我已经搜索了很多,但我没有找到任何可行的例子,所以我在这里提出了我的问题。我在同一个表中有一个父子关系的概念,例如,我有这样的表类别:

id int auto_increment primary
name varchar
type varchar
parentid int 

现在我想生成具有多级选项的选择框,如:

<select class="category" name="category">
   <option value="-1">Select Category</select>
   <optgroup value="0" label="Parent Tag">
      <option value="1">Child Tag</option>
      <option value="2">Child Tag</option>
   </optgroup>
      <optgroup value="3" label="Parent Tag">
      <option value="4">Child Tag</option>
      <option value="5">Child Tag</option>
   </optgroup>
</select>

我也想生成与上面相同的菜单。

<ul>
<li>Menu 1</li>
<li>
   Menu 2
   <ul class="dropdown">
     <li>Menu 1 of 2</li>
     <li>Menu 2 of 2</li>
     <li>Menu 3 of 2</li>
   </ul>
</li>
<li>Menu 3</li>
<li>
menu 4
   <ul class="dropdown">
     <li>Menu 1 of 4</li>
     <li>Menu 2 of 4</li>
     <li>Menu 3 of 4</li>
   </ul>
</li>
</ul>

请朋友帮助在laravel 5中实现此功能。此深度不限,可以是2,3,4;用户想要添加的数量。

Model
class Category extends Model{
...
public function parent()
    {
        return $this->belongsTo('App\Models\Category', 'parentid');
    }

    public function children()
    {
        return $this->hasMany('App\Models\Category', 'parentid');
    }
}

In Controller
$categories = Category::with('children')->select('name', 'id','parentid')->where('configtype','=','Category')->get();
return view('admin.category.index',['pageTitle' => 'Category', 'configlist' => $categories]);

In view
?

1 个答案:

答案 0 :(得分:3)

对于ul,您可以使用刀片创建递归函数,例如

@include('partials.menu', $items)

然后在那个视图中:

<ul>
    {{-- You would have to provide your own logic to decide which class name the ul should have --}}
    @foreach($items as $item)

        {{ $item->name }}
        @if(!empty($item->children)) {{-- Or however you want to check for children --}}
            @include('partials.menu', ['items' => $item->children]) {{-- Here I am just telling blade to treat the children as $items where they are passed through --}}
        @endif
    @endforeach
</ul>

这是使用blade的递归函数的基本实现。

您也可以对select使用类似的方法。

希望这有帮助!