刀片模板,@ yield中的@yield()

O P*_*O P 15 php opengraph laravel blade

这是我使用Laravel 5的Open Graph标签的当前实现:

app.blade.php

<title>@yield('title')</title>
<meta property="og:title" content="@yield('og-title', 'DEFAULT PAGE TITLE')">
<meta property="og:image" content="@yield('og-image', 'default.png')">
<meta property="og:url" content="@yield('og-url', '{{ Request::url() }}')">
<meta property="og:site_name" content="SITE NAME">
Run Code Online (Sandbox Code Playgroud)

page.blade.php

@extends('app')
@section('title', $article->title . ' | SITE NAME')
@section('og-title', $article->title)
@section('og-image', secure_url('img/news/' . $article->image .'.png'))
Run Code Online (Sandbox Code Playgroud)

它大部分都有效,但我有几个问题:

  1. 有没有办法使用的方式@yield()@yield

    我试过<meta property="og:title" content="@yield('og-title', @yield('title'))">但它没用.

  2. 如何获取页面的当前SECURE URL?

    {{ Request::url() }}回来http://example.com/page,但我想要https://example.com/page

作为元数据,如果您有任何建议可以改进我目前的OG方法,请告诉我.

sha*_*ddy 2

有一种简单的方法可以实现您想要的目标。您可以做的是将OG元标记html移动到部分视图,您可以根据需要在每个页面上传递参数。例如,在您的主布局中,只需为 og 标签创建部分:

应用程序.blade.php

<title>@yield('title')</title>
@section('ogtags')

@show
Run Code Online (Sandbox Code Playgroud)

现在创建您的部分视图,让我们称之为:

og_tags.blade.php

<meta property="og:title" content="{{ $title or 'DEFAULT PAGE TITLE' }}">
<meta property="og:image" content="{{ $image or 'default.png' }}">
<meta property="og:url" content="{{ isset($url) ? $url : str_replace('http://', 'https://', Request::url()) }}">
Run Code Online (Sandbox Code Playgroud)

现在,您可以在视图中轻松添加 og 标签,如下所示:

home.blade.php

@extends('app')

@section('ogtags')
    @include('og_tags', ['title' => 'my title', 'image' => 'my-image.png'])
@stop

@section('content')
     your content here
@stop
Run Code Online (Sandbox Code Playgroud)

对于安全 url 问题,Request::url()返回页面的当前 url,如果是通过 HTTPS,则以 开头https://,否则以 开头http://。所以这就是为什么我只是将其替换为 https

str_replace('http://', 'https://', Request::url())
Run Code Online (Sandbox Code Playgroud)

如果您希望始终拥有 og_tags (如果您的视图没有定义此部分并且您想显示默认的部分),您可以像这样修改您的app.blade.php :

<title>@yield('title')</title>
@section('ogtags')
    @include('og_tags')
@show
Run Code Online (Sandbox Code Playgroud)

这是Blade的一个很酷的部分,您可以将所有内容分割成更小的部分,然后将它们包含在动态参数中,或者只是创建视图编辑器来处理数据。