【问题标题】:Setting active class for menu items dynamically in laravel在 laravel 中动态设置菜单项的活动类
【发布时间】:2020-08-10 15:35:29
【问题描述】:

我正在使用 bootstrap 4 创建一个 laravel 应用程序。

我的主导航菜单位于 app.blade.php 中。我有四个主要刀片,关于、产品、联系和博客。

然后我需要根据当前页面更改菜单项活动类。由于菜单是从app.blade.php 动态加载的,因此我必须在导航菜单中动态设置当前页面的活动类。

我所做的是在每个刀片中定义一个名为 $currentpage 的变量并为其分配页面名称,假设它是 blog.blade.php

<?php $currentPage = 'blog';?>
@extends('layouts.app')

@section('content')

app.blade.php

<li class="<?php if($currentPage =='blog'){echo 'nav-item active';}?>">
                            <a class="nav-link " href="{{ url('/blog') }}">{{ __('sentence.Blog') }}</a>
                        </li>

所以这可以正常工作..

但我想知道这是正确的做法吗?还有哪些其他可能的方法可以满足我的要求

【问题讨论】:

  • 是的,我更喜欢这种方式,因为我在我的项目中使用过这种方式
  • 没错。 Bt 我建议使用三元运算符:(condition) ? true : false;
  • 您也可以对页面使用会话,当特定页面在控制器中渲染时,您可以在会话中设置页面名称,这样做的好处是您不需要为每个刀片文件都去设置页面名称。

标签: php laravel laravel-5 bootstrap-4 navigation


【解决方案1】:

您可以使用
request()-&gt;is() 方法,而不是在布局文件中定义$currentPage 变量:

<li class="nav-item {{ request()->is('blog') ? 'active' : ''}}">
    <a class="nav-link " href="{{ url('blog') }}">{{ __('sentence.Blog') }}</a>
</li>

is() 方法本质上采用请求的当前 url 路径,并使用 Str::is() 来检查您传入的模式。

这样您只需检查当前 URL 是否与链接 URL 匹配,而不必在应用程序的其他地方定义额外的数据。

【讨论】:

    【解决方案2】:

    在 Laravel 中动态设置菜单项的活动类,检查 PHP 刀片文件的以下代码以检查菜单项中的多个数组段设置活动类

    @php
        $segment1 = Request::segment(1);
        $pages = array('blog', 'account', 'profile', 'settings');
    @endphp
    <li class="@if(in_array($segment1, $pages)) active @endif">
        <a href="javascript: void(0);">
            <span>Blog</span>
        </a>
    </li>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多