Laravel刀片根据视图覆盖布局中的徽标



我有一个Laravel布局,其中包含网站的非常基本的结构,包括带有徽标的标题。

现在我需要添加一个自定义徽标,但仅在 3 个特定页面上。我可以简单地复制布局,但两个文件之间的唯一区别只是徽标。

有没有办法在特定页面上加载自定义徽标,并在所有剩余页面上加载默认徽标?

布局文件中用于显示徽标的代码为:

<img src="{{ asset('/images/logo.png') }}" class="logo"/>

提前致谢

您可以对 img 源 URL 使用变量,并将默认徽标作为回退

<img src="{{ $logo_url ?? asset('/images/logo.png') }}" class="logo"/>

在要覆盖徽标的页面上,将其从控制器传递到视图

$logo_url = asset('/images/custom_logo.png');
return view('some.view', compact('logo_url'));

在您不传递自定义徽标的页面上,它将回退到默认选项

顺便说一句,如果需要此自定义徽标的所有页面都位于网站的同一部分下,则可以使用视图编辑器根据要呈现的边栏选项卡模板来设置徽标。因此,如果自定义徽标用于网站的"wiki"部分的一部分,并且所有视图都赢得同一文件夹......

View::composer('wiki.*', function ($view) {
$view->with('logo_url', asset('/img/logo.png');
});

我只是将徽标设置为具有默认值的变量,然后在要覆盖该徽标的视图中设置变量:

<!-- resources/views/layouts/app.blade.php -->
<!DOCTYPE html>
<html>
<body>
<header>
<a href="{{ url('/') }}">
<img src="{{ $logo ?? asset('img/default-logo.png') }}" alt="logo" />
</a>
</header>
</body>
</html>

在要覆盖徽标的视图中:

@extends('layouts.app', ['logo' => asset('img/custom-logo.png')])
{{-- Rest of view --}}

在我看来,在子视图中使用具有默认值和@section@yield比@AlecJoy的选项更容易、更干净。

布局视图:

<img src="@yield('logo', asset('/images/logo.png'))" class="logo"/>

首页浏览:

@extends('layout')
@section('logo', asset('images/logo1.png'))

第二页浏览:

@extends('layout')
@section('logo', asset('images/logo2.png'))

第三页浏览:

@extends('layout')
@section('logo', asset('images/logo3.png'))

您需要了解的只是:https://laravel.com/docs/6.x/blade#defining-a-layout

最新更新