【问题标题】:Add View Name to CSS Class on Body将视图名称添加到正文上的 CSS 类
【发布时间】:2016-08-23 16:31:32
【问题描述】:

我正在寻找一种方法来回显视图名称并将其作为 CSS 类放入 body 标记内的主模板中。

原因是我有一些页面需要更改某些 CSS 元素,但是内联代码效率低下,我真的不想为该页面创建专用视图。

因此,例如,如果我要登陆主页,正文标签将是:

<body class="home">

如果我要去关于我们的页面,它会变成:

<body class="about">

【问题讨论】:

  • 如果您使用动态网址,例如 ?action=home 或 ?action=about 那么您可以使用
  • @Matt 嗨,马特,我正在使用 Laravel,所以我假设我需要制作一个控制器来捕获视图名称,然后将其转换为变量。一旦它在一个变量中,我需要将它回显到像 {{ $viewname }} 这样的类或类似的东西。到了这个地步,我很困惑。

标签: php laravel


【解决方案1】:

打开您的AppServiceProvider 类,boot() 方法并插入以下代码:

View::composer('*', function ($view) {
    $view_name = str_replace('.', ' ', $view->getName());
    View::share('view_name', $view_name);
});

然后你就可以在你的视图中访问$view_name变量了。

关于@Stuart 的回答,使用$view-&gt;getName() 将准确返回带有点符号的视图路径。例如,您的视图在resources/views/settings/index 目录下,您的视图名称为:settings.index

那么呢?类名将包含 dot 字符意味着在编写 CSS 时更容易混淆。看到这个线程: Styling elements with a dot (.) in the class name

通过将.替换为空格,上例中的类名将变为settings index,您可以使用.settings选择器,或.index选择器,或.setting.index选择器。

自定义类名

上面的方法是自动生成类名,有很多方法:

@yield()@section()

<body class="@yield('body-class')">

那么在你看来:

@section('body-class', 'your-class-name')

@stack()@push()

从 Laravel 5.4 开始,你可以使用 @stack@push,这样你就可以推送多少次了。

<body class="@stack('body-class')">

那么在你看来

@push('body-class', 'your-class-name')
@push('body-class', ' another-class-name')

【讨论】:

  • 恕我直言,堆栈/推送方法更灵活
【解决方案2】:

在你的控制器中使用它

View::composer('*', function($view){

    View::share('view_name', $view->getName());

});

在您的视图页面中使用它

<body class="{{$view_name}}">

【讨论】:

    【解决方案3】:

    添加到过滤器(或路由):

    View::composer('*', function($view){
        View::share('view_name', $view->getName());
    }); 
    

    然后您可以使用$view_name 访问视图名称

    【讨论】:

    • 是的,它就在现场!一旦习惯了系统,就很容易淘汰应用程序。刀片模板系统太简单了哈哈!
    • 确实,使用起来很愉快,而且就像您说的那样 - 可以立即制作出外观漂亮且功能强大的 PoC / 原型。
    【解决方案4】:

    试试这个:

    <body class="@yield('class')">
    

    关于你的看法

    @section('class', 'Your boddy class')
    

    【讨论】:

    • 第二个代码应该放在哪里?我在@extends('layouts.app') 之前和之后尝试过,但没有做任何事情,我的身体类保持为空:/
    【解决方案5】:

    您可以轻松地在控制器(在构造函数或动作的方法中)设置类名:

    View::share('bodyClass', 'nameOfCertainClass');

    然后:

    &lt;body class="{{$bodyClass or 'default}}'"&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-22
      • 1970-01-01
      • 1970-01-01
      • 2016-02-15
      • 2017-02-19
      相关资源
      最近更新 更多