这是我目前使用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">
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'))
它大部分都有效,但我有几个问题:
有没有办法在@yield()
中使用@yield
?
我尝试了<meta property="og:title" content="@yield('og-title', @yield('title'))">
,但它没有用。
如何获取页面的当前SECURE网址?
{{ Request::url() }}
返回http://example.com/page
,但我想要https://example.com/page
作为元数据,如果您有任何建议可以改进我目前的OG方法,请告诉我。
答案 0 :(得分:1)
有一种简单的方法可以达到你想要的效果。你可以做的是将OG元标记html移动到局部视图,你可以根据需要在每个页面上传递参数。例如,在主布局中,只需为og标记创建部分:
<强> app.blade.php 强>
<title>@yield('title')</title>
@section('ogtags')
@show
现在创建部分视图,让我们调用它:
<强> 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()) }}">
所以现在在你的视图中你可以轻松添加这样的og-tags:
<强> home.blade.php 强>
@extends('app')
@section('ogtags')
@include('og_tags', ['title' => 'my title', 'image' => 'my-image.png'])
@stop
@section('content')
your content here
@stop
对于安全网址问题,Request::url()
会返回网页的当前网址,如果是通过HTTPS,则会以https://
开头,否则会以http://
开头。所以这就是我将其替换为始终为https
str_replace('http://', 'https://', Request::url())
如果您希望始终拥有og_tags(如果您的视图未定义此部分并且您想显示默认部分),则可以像这样修改 app.blade.php :
<title>@yield('title')</title>
@section('ogtags')
@include('og_tags')
@show
这是Blade的一个很酷的部分,您可以将所有内容拆分成较小的部分,然后使用动态参数包含它们,或者只创建视图编辑器来处理数据。
答案 1 :(得分:0)
我总是使用meta.blade.php
并将meta
与主要布局分开,不仅meta
而且styles
和scripts
在可能的情况下然后包括使用@include(...)
,但是如何让它变得动态?在这种情况下,我使用类似于你的方法,但有点不同,这让我充分灵活地使它真正动态。我是这样做的,可能它会回答你在这里寻求的东西。所以,让我们创建一个meta.blade.php&#39;文件和我的文件如下:
<!-- Title-->
<title>@yield('title', smart('site.title'))</title>
<!-- Meta-->
<meta name="keywords" content="@yield('keywords', getSiteMeta('keywords'))" />
<meta name="description" content="@yield('description', getSiteMeta('description'))" />
<meta name="author" content="@yield('author', getSiteMeta('author'))" />
<!-- CSRF for AJAX-->
<meta name="csrf-token" content="{{ csrf_token() }}" />
注意@yield('keywords', getSiteMeta('keywords'))
所以这里; getSiteMeta
是一个辅助函数,它在我的app\Helpers\Common.php
文件中声明,函数如下所示:
/**
* Prapare meta Tags by $name
*
* @param String $metaname Meta Name
* @return Meta Content
*/
function getSiteMeta($name)
{
return smart("site.meta.$name");
}
此处还涉及另一个功能,即:
/**
* Short cut to config call for smart.php file items
* @param String $str Config Key
* @return String Config Value
*/
function smart($str)
{
return config("smart.$str");
}
实际上,我在config\smart.php
和smart
的配置文件是我的网站名称,所以我在{{1}保留了所有与网站相关的配置看起来像这样:
config\smart.php
可能你有这个想法,我可以致电// config/smart.php
return [
'site' => [
'name' => 'Smart',
'title' => 'Smart Title',
'tagline' => 'Smart Tag Line',
'meta' => [
'keywords' => 'Smart Keywords',
'language' => 'english',
'description' => '...',
'author' => 'Sheikh Heera'
],
],
'role' => [
'default' => 'genaral', # By default, a user gets this role when registers.
'reserved' => 'superuser' # Application's Admin must have this role assigned.
],
// More...
];
来获取我的网站的配置因此我不需要使用smart('key_name')
,默认情况下所有config('smart.key')
值都是存储在我的meta
文件中,如果我不使用这样的部分:
config/smart.php
然后我总是使用默认设置并使用辅助函数@section('keywords')
Some, Keywords, Here
@stop
我有足够的灵活性来更改函数的逻辑,例如,我可以更改{{1}的默认源标签,可以在运行中构建它。
关于getSiteMeta
,它取决于您的网站,如果您使用了安全网址(meta
),https
只返回您当前网址的内容,那么它是否会ssl/https
{ {1}}然后它会返回,否则您将获得Request::url()
。