在Laravel 5中设置Bootstrap导航栏活动类

时间:2015-04-24 02:12:24

标签: php laravel laravel-5

我一直在寻找解决方案,但在创建帮助程序时尤其不能理解。我是Laravel的新手,我想要一个关于如何为我的bootstrap导航栏设置活动类的简单或非详细说明。

这是我迄今为止所做的,但无法完成:

<div class="header clearfix">
        <nav>
          <ul class="nav nav-pills pull-right">
            <li class=""><a href="{{ url('/') }}">Home</a>
            </li>
            <li {{ Request::is('about*') ? ' class="active"' : null }}><a href="{{ url('about') }}">About Us</a>
            </li>
            <li><a href="{{ url('auth/login') }}">Login</a>
            </li>
        </ul>
    </nav>
    <h2 class="">Tobacco Prevention and Control Program</h2>
</div>

修改

设置class="active"将使所有导航药都处于活动状态。预期效果是只有当前页面的li具有active类。

修改

对于那些访问这篇文章的人。我设法得到了解决方案,但我不确定它是否整洁。嗯,这对我来说很好。

<ul class="nav nav-second-level">
                    <li class="{{ Request::segment(1) === 'programs' ? 'active' : null }}">
                        <a href="{{ url('programs' )}}" ></i> Programs</a>
                    </li>
                    <li class="{{ Request::segment(1) === 'beneficiaries' ? 'active' : null }}">
                        <a href="{{url('beneficiaries')}}"> Beneficiaries</a>
                    </li>
                    <li class="{{ Request::segment(1) === 'indicators' ? 'active' : null }}">
                        <a href="{{url('indicators')}}"> Indicators</a>
                    </li>                     
                </ul>

15 个答案:

答案 0 :(得分:46)

您的代码运行正常,但您必须将其用于可以处于活动状态的每个链接。最好只返回类名,而不是class="...",以便添加其他类。

最后使用*时要小心(about*)。如果您将/*用于主页,则会始终将其标记为有效(因为每个其他页面都以/开头)。

<ul class="nav nav-pills pull-right">
    <li class="{{ Request::is('/') ? 'active' : '' }}">
        <a href="{{ url('/') }}">Home</a>
    </li>
    <li class="{{ Request::is('about') ? 'active' : '' }}">
        <a href="{{ url('about') }}">About Us</a>
    </li>
    <li class="{{ Request::is('auth/login') ? 'active' : '' }}">
        <a href="{{ url('auth/login') }}">Login</a>
    </li>
</ul>

您也可以将{{ Request::is('/') ? 'active' : '' }}移动到辅助函数/方法。

答案 1 :(得分:34)

如果您正在使用命名路由。您可以在视图中使用此方法:

{{ Route::currentRouteNamed('about') ? 'active' : '' }}

{{ Route::is('about') ? 'active' : '' }}

Illuminate\Routing\Router#is(...)Illuminate\Routing\Router#currentRouteNamed(...)的别名。

答案 2 :(得分:21)

<ul class="nav nav-second-level">
                    <li class="{{ Request::segment(1) === 'programs' ? 'active' : null }}">
                        <a href="{{ url('programs' )}}" ></i> Programs</a>
                    </li>
                    <li class="{{ Request::segment(1) === 'beneficiaries' ? 'active' : null }}">
                        <a href="{{url('beneficiaries')}}"> Beneficiaries</a>
                    </li>
                    <li class="{{ Request::segment(1) === 'indicators' ? 'active' : null }}">
                        <a href="{{url('indicators')}}"> Indicators</a>
                    </li>                     
                </ul>

答案 3 :(得分:9)

将此内容放入helper.php

function set_active($path, $active = 'active') {

    return call_user_func_array('Request::is', (array)$path) ? $active : '';

}

像这样使用

<li class="{{ set_active(['about*']) }}"><a href="{{ url('about') }}">About Us</a>

您可以将单个字符串传递给路由或多个和通配符。

查看有关Laravel Trick

的更多详情

答案 4 :(得分:8)

解决方案是

<ul class="nav navbar-nav pull-right">
      <li class="{{ Request::is('/') ? 'active' : '' }}">
         <a href="{{ url('/') }}">Home</a>
     </li>
      <li class="{{ Request::is('about') ? 'active' : '' }}">
         <a href="{{ url('/about') }}">About Us</a>
     </li>
      <li class="{{ Request::is('whyus') ? 'active' : '' }}">
         <a href="{{ url('/whyus') }}">Why Us</a>
      </li>
 </ul>

答案 5 :(得分:7)

Request::path()返回请求uri,例如:http://localhost/programs,将返回programs,因此您可以执行此操作:

 <li class="{{ Request::path() ==  'programs' ? 'active' : ''  }}">
                    <a href="{{ url('programs') }}"></i> Programs</a>
                </li>

答案 6 :(得分:2)

在刀片文件上设置一个部分(如home.blade.php)

@section('Home', 'my-active-class')

然后在另一个刀片文件(如about.blade.php)上设置一个部分

@section('About', 'my-active-class')

并在app.blade.php上生成此部分(假设您是从app.blade.php扩展而来)

...
<li class="@yield('Home')"><a href="#">Home</a></li>
<li class="@yield('About')"><a href="#">About</a></li>
...

答案 7 :(得分:1)

我认为这很简单,对我有用。

Industry                                   |Excluded  | Output
:------------------------------------------|:---------|:------
A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U  | P,L,K,L  | ?OUTPUT
------------------------------------------ |----------|------
A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U  | P,L,K,L  | ?OUTPUT 

答案 8 :(得分:1)

我发现@Daniel Antos给出的解决方案是最佳答案。 Danial Antos先生还警告说最后使用*(大约*)。因为在使用/ *作为主页时,它始终标记为活动(因为每个其他页面都以/开头)。所以,我使用如下,它对我来说很好:

{{ (Request::is('users') || Request::is('users/*') ? 'active open' : '') }}

答案 9 :(得分:1)

我找到了解决方法:

composer require devmarketer/easynav

更多详细信息:https://github.com/DevMarketer/LaravelEasyNav

答案 10 :(得分:0)

使用 Request::is('[level]') ? 'active' : '' 如果是多层,请使用:

Request::is('[level]', '[level]/*') ? 'active' : ''

答案 11 :(得分:0)

<ul class="nav nav-second-level">
                    <li class={{ Request::is('/') ? 'active' : '' }}>
                        <a href="{{ url('programs' )}}" ></i> Programs</a>
                    </li>
                    <li class="{{ Request::segment(1) === 'beneficiaries' ? 'active' : null }}">
                        <a href="{{url('beneficiaries')}}"> Beneficiaries</a>
                    </li>
                    <li class="{{ Request::segment(1) === 'indicators' ? 'active' : null }}">
                        <a href="{{url('indicators')}}"> Indicators</a>
                    </li>                     
                </ul>

答案 12 :(得分:0)

最简单的方法是添加类 active :-

@if (request()->routeIs('dashboard'))
   class="active"
@endif

答案 13 :(得分:0)

如果我们设法获得了 URL 路径,我们可以将它与路由进行比较并在那里放置一个活动类。

 {{'/'==request()->path()?'active':''}}

 {{'about'==request()->path()?'active':''}}

答案 14 :(得分:-1)

这很简单:在使用bootstrap时让你的链接处于活动状态,你需要的只是类链接中的if语句,例如:我的当前url为http://example.com/home

 <li class="{{ Request::url() == url('/home') ? 'active' : '' }}"><a href="/home" ></li>
     Home
 </a>

你很高兴。