这是我目前使用Laravel 5实现的开放图形标记:
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'))">,但没有成功。{{ Request::url() }}返回http://example.com/page,但我想要https://example.com/page作为一个元,请告诉我,如果您有任何建议,以改进我目前的OG方法。
发布于 2015-05-28 05:42:48
有一个简单的方法可以实现你想要的。您可以做的是将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标记:
home.blade.php
@extends('app')
@section('ogtags')
@include('og_tags', ['title' => 'my title', 'image' => 'my-image.png'])
@stop
@section('content')
your content here
@stop对于安全的url问题,Request::url()返回页面的当前url,如果它是通过HTTPS开始的,它将以https://开始,否则它将以http://开始。这就是为什么我只是把它替换成始终是https。
str_replace('http://', 'https://', Request::url())如果您希望始终拥有app.blade.php (如果您的视图没有定义本节,并且希望显示默认部分),您只需修改您的og_tags:
<title>@yield('title')</title>
@section('ogtags')
@include('og_tags')
@show这是刀片的一个很酷的部分,您可以将所有内容分割成更小的部分,然后将它们包含在动态参数中,或者创建视图组合器来处理数据。
发布于 2015-06-03 19:20:55
我总是使用meta.blade.php,并将meta与主布局分开,不仅是meta,还包括styles和scripts (如果可能的话),还包括使用@include(...),无论如何,如何使其动态化?在本例中,我使用了类似于您的方法,但略有不同,这让我可以完全灵活地使它具有真正的动态。我就是这样做的,也许它会回答你在这里寻找的东西。因此,让我们创建一个'meta.blade.php‘文件,我的文件如下所示:
<!-- 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是我的站点名,所以我将所有与站点相关的信息都保存在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然后,我总是使用默认设置,通过使用助手函数getSiteMeta,我有足够的灵活性来更改函数的逻辑,例如,我可以更改meta标记的默认源,并可以动态构建它。
关于https,这取决于您的站点,如果您使用过安全url (ssl/https),而Request::url()只返回您当前的url,那么如果它是https,那么它将返回,否则您将得到http。
https://stackoverflow.com/questions/30420679
复制相似问题