在 laravel 中动态设置菜单项的活动类

Posted

技术标签:

【中文标题】在 laravel 中动态设置菜单项的活动类【英文标题】:Setting active class for menu items dynamically in 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; 您也可以对页面使用会话,当特定页面在控制器中渲染时,您可以在会话中设置页面名称,这样做的好处是您不需要为每个刀片文件都去设置页面名称。 【参考方案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>

【讨论】:

以上是关于在 laravel 中动态设置菜单项的活动类的主要内容,如果未能解决你的问题,请参考以下文章

C#.NET中如何设置CONTEXTMENU菜单项的点击事件

Laravel 动态依赖下拉菜单

Android:通过更改片段更改菜单项的可见性

Drupal:如何动态设置活动菜单项

动态更改弹出菜单项的字体大小 Android

jQuery 将背景图像设置为菜单悬停状态和菜单活动状态