将视图名称添加到Body

时间:2016-04-28 18:24:48

标签: php laravel

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

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

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

<body class="home">

如果我要转到关于我们的页面,它将改为:

<body class="about">

5 个答案:

答案 0 :(得分:7)

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

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

然后,您可以使用$view_name

访问视图名称

答案 1 :(得分:3)

在控制器中使用此功能

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

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

});

在您的视图页面中使用此功能

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

答案 2 :(得分:2)

试试这个:

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

关于你的意见

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

答案 3 :(得分:2)

打开AppServiceProvider类,boot()方法并插入此代码:

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

然后,您可以在视图中访问$view_name变量。

关于@Stuart答案,使用$view->getName()将返回具有点表示法的精确视图路径。例如,您查看的位于resources/views/settings/index目录下,您的视图名称为:settings.index

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

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

自定义类名

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

.setting.index@yield()

@section()

然后在你的观点中:

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

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

从Laravel 5.4开始,您可以使用@push()@stack,这样您就可以根据需要推送多少时间。

@push

然后在你的观点中

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

答案 4 :(得分:1)

您可以在控制器中(在contructor或action的方法中)轻松设置类名:

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

然后:

<body class="{{$bodyClass or 'default}}'">