首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >刀片模板,“产”中的“产”()

刀片模板,“产”中的“产”()
EN

Stack Overflow用户
提问于 2015-05-24 06:18:43
回答 2查看 4.5K关注 0票数 15

这是我目前使用Laravel 5实现的开放图形标记:

app.blade.php

代码语言:javascript
复制
<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

代码语言:javascript
复制
@extends('app')
@section('title', $article->title . ' | SITE NAME')
@section('og-title', $article->title)
@section('og-image', secure_url('img/news/' . $article->image .'.png'))

它在很大程度上起作用,但我有几个问题:

  1. 有办法在@yield()中使用@yield吗? 我试过<meta property="og:title" content="@yield('og-title', @yield('title'))">,但没有成功。
  2. 如何获得页面的当前安全url? {{ Request::url() }}返回http://example.com/page,但我想要https://example.com/page

作为一个元,请告诉我,如果您有任何建议,以改进我目前的OG方法。

EN

回答 2

Stack Overflow用户

发布于 2015-05-28 05:42:48

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

app.blade.php

代码语言:javascript
复制
<title>@yield('title')</title>
@section('ogtags')

@show

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

og_tags.blade.php

代码语言:javascript
复制
<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

代码语言:javascript
复制
@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。

代码语言:javascript
复制
str_replace('http://', 'https://', Request::url())

如果您希望始终拥有app.blade.php (如果您的视图没有定义本节,并且希望显示默认部分),您只需修改您的og_tags:

代码语言:javascript
复制
<title>@yield('title')</title>
@section('ogtags')
    @include('og_tags')
@show

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

票数 2
EN

Stack Overflow用户

发布于 2015-06-03 19:20:55

我总是使用meta.blade.php,并将meta与主布局分开,不仅是meta,还包括stylesscripts (如果可能的话),还包括使用@include(...),无论如何,如何使其动态化?在本例中,我使用了类似于您的方法,但略有不同,这让我可以完全灵活地使它具有真正的动态。我就是这样做的,也许它会回答你在这里寻找的东西。因此,让我们创建一个'meta.blade.php‘文件,我的文件如下所示:

代码语言:javascript
复制
<!-- 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文件中声明,该函数如下所示:

代码语言:javascript
复制
/**
 * Prapare meta Tags by $name
 * 
 * @param  String $metaname Meta Name
 * @return Meta Content
 */
function getSiteMeta($name)
{
    return smart("site.meta.$name");
}

这里还涉及另一个功能,即:

代码语言:javascript
复制
/**
 * 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中,如下所示:

代码语言:javascript
复制
// 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文件中,所以如果我不使用这样的部分:

代码语言:javascript
复制
@section('keywords')
    Some, Keywords, Here
@stop

然后,我总是使用默认设置,通过使用助手函数getSiteMeta,我有足够的灵活性来更改函数的逻辑,例如,我可以更改meta标记的默认源,并可以动态构建它。

关于https,这取决于您的站点,如果您使用过安全url (ssl/https),而Request::url()只返回您当前的url,那么如果它是https,那么它将返回,否则您将得到http

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30420679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档