【问题标题】:Sidebar with dropdown menu from database带有数据库下拉菜单的侧边栏
【发布时间】:2018-10-09 23:27:36
【问题描述】:

我正在尝试使用数据库在我网站的侧边栏上添加菜单项。我的数据库结构如下:

ID / Product_Name/ Product_Type
1 / product1 / type1
2 / product2 / type1
3 / product3 / type2
4 / product4 / type2

我需要一个侧边栏,将每种类型列为菜单项,将属于该类型的产品作为子菜单项:

  Type1
    product1 
    product2 
  Type2
    product3
    product4

然而,使用我当前的代码,我实现了每个菜单项,但我的子菜单显示了整个数据库中的每个产品,而不仅仅是属于该类型的产品。

我的控制器:

public function index()
{

    //get all products
    $products = Product::all();  

    //get each type
    $types = Product::distinct()->get(['Type']);

    return view('pages.getstarted')->with('products', $products)                                       
                                   ->with('types', $types);
}

我的看法:

<ul class="list-sidebar">                                
  @foreach($types as $type)
    <li class="header">
      <a href="#" data-toggle="collapse" data-target="#1">{{$type->Type}}<span class="fa fa-chevron-left pull-right"></span></a>
      <ul class="sub-menu collapse" id="1">
        @foreach($products as $product)
          <li><a href="1">{{$product->Product_Name}}</a></li>
        @endforeach
      </ul>
    </li>   
  @endforeach 
</ul>    

我对 Laravel 非常陌生,因此我们将不胜感激。

【问题讨论】:

    标签: php html laravel-5


    【解决方案1】:

    只需使用Collection 实例中的groupBy 方法稍微更改您的控制器和视图:

    Documentation

    控制器

    public function index()
    {
        //get all products
        $products = Product::all();  
    
        return view('pages.getstarted')->with('products', $products);
    }
    

    查看

    <ul class="list-sidebar">
        @foreach($products->groupBy('Product_Type') as $type => $subCollection)
        <li class="header">
            <a data-target="#1" data-toggle="collapse" href="#">
                {{$type}}
                <span class="fa fa-chevron-left pull-right"></span>
            </a>
            <ul class="sub-menu collapse" id="1">
                @foreach($subCollection as $product)
                <li>
                    <a href="1">{{$product->Product_Name}}</a>
                </li>
                @endforeach
            </ul>
        </li>
        @endforeach
    </ul>
    

    【讨论】:

      【解决方案2】:

      $types 开始,执行以下操作:

          $menu = [];
          foreach ($types as $type){
            $products = Product::where('Product_Type', $type->Product_Type)->get();
             foreach ($products as $product){
                $menu[$type->Product_Type][] = $product->Product_Name;
             }
          }
      return view('pages.getstarted',['menu' => $menu]);
      

      然后在视图中:

      <ul>
      @foreach($menu as $type)
       <li>{{$type}}<ul>
        @foreach($type as $item)
         <li>{{$item}}</li>
        @endforeach
        </ul></li>
      @endforeach
      </ul>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-19
        • 1970-01-01
        • 2014-12-05
        相关资源
        最近更新 更多