在不同刀片中使用侧边栏

时间:2018-10-29 11:46:06

标签: php html5 laravel laravel-blade laravel-5.7

我是laravel的新手,实际上我必须在应用程序的每个刀片中都编写侧边栏才能使其正常工作,但是我想根据我所在站点的部分使用其他侧边栏。 所以这就是我想要做的:

编辑1

layouts / main.blade.php

<div class="wrapper">
   <div class="sidebar" data-color="brown" data-active-color="danger">
      <div class="logo">
         <!-- Content -->
      </div>
      <!-- Sidebar -->
      @if(request()->is("{{ url('/')}}/{operator}"))
         @include('operator.sidebar')
      @else
         @include('stduser.sidebar')
      @endif
      <!-- End sidebar -->
   </div>

   <div class="main-panel">
      <!-- Navbar -->
      <nav></nav>
      <!-- End navbar -->

      <!-- Main content section -->
      @yield('main-panel')
      <!-- End main content section -->

      <!-- Footer -->
      <footer></footer>
      <!-- End footer -->
   </div>
</div>

stduser / dashboard.blade.php

@extends('layouts.main')

@section('main-panel')
   <!-- Main panel contents -->
@endsection

@section('extrajs')
   <!-- script contents -->
@endsection

stduser / sidebar.blade.php

<div class="sidebar-wrapper">
  <div class="user btn-rotate">
     <div class="photo">
        <i class="fa fa-user-circle-o fa-2x" aria-hidden="true" style="color:#fff"></i>
     </div>
     <div class="info">
        <a href="{{ url('/user') }}/profile">
           <span>
              {{ Auth::user()->name }}
           </span>
        </a>
        <div class="clearfix"></div>
     </div>
  </div>

  <ul class="nav">
     <li class="active btn-rotate">
        <a href="{{ url('/') }}">
           <i class="nc-icon nc-bank"></i>
           <p>Companies</p>
        </a>
     </li>
  </ul>
</div>

operator / sidebar.blade.php

<div class="sidebar-wrapper">
  <div class="user btn-rotate">
     <div class="photo">
        <i class="fa fa-user-circle-o fa-2x" aria-hidden="true" style="color:#fff"></i>
     </div>
     <div class="info">
        <a href="{{ url('/user') }}/profile">
           <span>
              {{ Auth::user()->name }}
           </span>
        </a>
        <div class="clearfix"></div>
     </div>
  </div>

  <ul class="nav">
     <li class="active btn-rotate">
        <a href="{{ url('/') }}/{{ $operator->id }}/about">
           <i class="fa fa-tachometer" aria-hidden="true"></i>
           <p>DashBoard</p>
        </a>
     </li>
     <li class="btn-rotate">
        <a href="{{ url('/')}}/{{ $operator->id}}/suppliers">
           <i class="fa fa-link" aria-hidden="true"></i>
           <p>Suppliers</p>
        </a>
     </li>
     <li class="btn-rotate">
        <a href="{{ url('/')}}/{{ $operator->id}}/products">
           <i class="fa fa-product-hunt" aria-hidden="true"></i>
           <p>Products</p>
        </a>
     </li>
  </ul>
</div>

这是我的视图的结构:

enter image description here

有办法使它工作吗?

2 个答案:

答案 0 :(得分:2)

您可以像@include('layouts / sidebar_'。$ sidebarName)这样包含刀片文件,如果要避免在include不存在时出现错误,则可以使用@includeIf('view.name',['some' =>'数据'])

所以您只有一次include语句和侧边栏内容

答案 1 :(得分:1)

根据对addi2113答案的反馈,您似乎希望根据所在的页面切换出侧边栏包含。有几种方法可以做到这一点。最简单(但最不灵活)的方法是根据路线显示某个侧边栏。例如,如果您对所有“操作员”页面都具有可预测的路由结构,例如example.com/operator/*,则可以通过在刀片视图中使用@if语句来执行以下操作。像这样:

Model

很显然,您可以对其进行编辑以使用所需的任何逻辑,但这是处理此问题的一种简单方法。

编辑:在您的main.blade中尝试此操作,而不要使用一个部分并产生:

@if(request()->is("/unique/url/pattern"))
    @include('operator.sidebar')
@else
    @include('stduser.sidebar')
@endif

编辑2:

由于似乎您在操作员页面上使用动态URL,所以有两个选择。第一种选择是使您的操作员路线比当前的路线更具唯一性,以便您可以使用星号表示当前模式的所有路线。例如,在routes / web.php中,将操作员页面的路由更改为这种模式:

<div class="wrapper">
  <div class="sidebar" data-color="brown" data-active-color="danger">
      <div class="logo">
         <!-- Content -->
      </div>
      <!-- Sidebar -->
      <div class="sidebar-wrapper">
        <div class="user btn-rotate">
           <div class="photo">
              <i class="fa fa-user-circle-o fa-2x" aria-hidden="true" style="color:#fff"></i>
           </div>
           <div class="info">
              <a href="{{ url('/') }}/profile">
                 <span>
                    {{ Auth::user()->name }}
                 </span>
              </a>
              <div class="clearfix"></div>
           </div>
        </div>
        @if(request()->is('/unique/url/pattern'))
             @include('operator.sidebar')
        @else
             @include('stduser.sidebar')
        @endif
     </div>
  </div>
</div>

通过将运算符添加到url中,您现在拥有一个可以引用的UNIQUE路径。然后,在主刀片中,您将像这样一起引用所有操作员路线:

Route::get('/operator/{operator}/about','OperatorController@about')->name('operator-about');

通过使URL唯一,您可以采用一种非常简单的方法来引用要显示操作员侧边栏的所有路由。

另一个我认为不那么可靠的选择是通过命名来引用特定的路由。例如,使用我在上面定义的名称为“ operator-about”的路线,我可以像这样显示操作员侧栏:

@if(request()->is('/operator/*'))
     @include('operator.sidebar')

然后,您将通过显式定义要显示其操作员侧边栏的所有命名路由来进行扩展。您可能会说,如果要包含很多路线,这将变得很混乱。我不建议这样做,但是您可以随意解决问题。