【问题标题】:Laravel - Creating bootstrap dropdown for each parent in a nested setLaravel - 为嵌套集中的每个父级创建引导下拉菜单
【发布时间】:2015-07-12 08:45:54
【问题描述】:

我正在使用 etrepat/baum 在 laravel 项目中为我的应用程序创建类别。当我想为类别创建引导下拉菜单时,在刀片中使用 @foreach 时遇到问题。当结构如下时,这很好用:

<nav id="nav2" role="navigation">
  <ul class="nav navbar-nav">
    <li class="dropdown">
      <a href="#" class="dropdown-toggle" data-toggle="dropdown">Shop by Category<span class="caret"></span></a>
      <ul class="dropdown-menu" role="menu">
        @foreach($catnav as $cat) @if($cat->depth == 0)
        <li>
          {{ HTML::link(URL::action('StoreController@getCategories', [$cat->slug]), $cat->name) }} @else($cat->depth == 1)
          <ul>
            <li><a href="{{ URL::to('/store/categories/' . implode('/', $cat->getAncestorsAndSelf()->lists('slug'))) }}">{{$cat->name}}</a>
            </li>
          </ul>
        </li>
        @endif @endforeach
      </ul>
    </li>
  </ul>
</nav>

这是上面的输出:

但我不想有一个 按类别购物 下拉菜单,但我试图为每个父类别创建一个 dropdown 以包含 dropdown-menu 中的子类别。我试过这个结构,但是@foreach 会弄乱布局。

<nav id="nav2" role="navigation">
  <ul class="nav navbar-nav">
    @foreach($catnav as $cat) @if($cat->depth == 0)
    <li class="dropdown">
      <a href="#" class="dropdown-toggle" data-toggle="dropdown">{{ HTML::link(URL::action('StoreController@getCategories', [$cat->slug]), $cat->name, array('class'=>'dropdown-toggle' ,'data-toggle'=>'dropdown')) }}<span class="caret"></span></a>
      @else($cat->depth == 1)
      <ul class="dropdown-menu" role="menu">
        <li><a href="{{ URL::to('/store/categories/' . implode('/', $cat->getAncestorsAndSelf()->lists('slug'))) }}">{{$cat->name}}</a>
        </li>
        @endif
      </ul>
    </li>
    @endforeach
  </ul>
</nav>

我怎样才能做到这一点?

【问题讨论】:

    标签: twitter-bootstrap laravel foreach blade nested-sets


    【解决方案1】:

    经过漫长的一天试图弄清楚这一点,我最终:

    • 使用toHierarchy() 方法返回查询树的嵌套集合。

    • 使用@foreach 循环获取所有父节点,并在另一个@foreach 中获取子节点。

    • 使用isRoot() 函数检查项目是否为父项。

    • 使用isLeaf()函数检查是否是分支的结尾。

    • 使用大量 @if 语句。

    解决方案

    <nav id="nav2" role="navigation">
        <ul class="nav navbar-nav">
        @foreach($catnav as $item)
            <li @if($item->isRoot())class ="dropdown"@endif>
                @if(!$item->isLeaf())
                    <a @if($item->isRoot()) class="dropdown-toggle"@endif href="/store/categories/{{ $item->slug }}">
                    {{ $item->name }}
                    @if($item->isRoot()) <span class="caret"></span> @endif
                    </a>
                @else
                    <a href="/store/categories/{{ $item->slug }}">{{$item->name}}</a>
                @endif
                @if($item->isRoot() && !$item->isLeaf())
                <ul class="dropdown-menu">
                    @foreach($item->children as $child)
                      <li><a href="{{ URL::to('/store/categories/'.implode('/', $child->getAncestorsAndSelf()->lists('slug'))) }}">{{$child->name}}</a></li>
                    @endforeach
                </ul>
                @endif
            </li>
        @endforeach
        </ul>
    </nav>
    

    【讨论】:

      【解决方案2】:

      这里是package I created to easily create Dropdown Menu,只专注于开发。

      您可以使用以下代码创建下拉菜单:

      • 刀片:

        {!! Dropmenu::display('MenuName') !!}
        
      • 控制器:

        $menu = Dropmenu::display('MenuName');
        return view('name.view', ['menu' => $menu]);
        

      【讨论】:

        猜你喜欢
        • 2020-01-28
        • 1970-01-01
        • 2016-06-05
        • 1970-01-01
        • 1970-01-01
        • 2012-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多