2015-05-24 5 views
15

Это моя текущая реализация Открытых тэгов Graph с использованием Laravel 5:лезвие шаблон, @yield() в @yield

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')) 

Он работает по большей части, но у меня есть пара запросов:

  1. Есть ли способ использования @yield() в @yield?

    Я пробовал <meta property="og:title" content="@yield('og-title', @yield('title'))">, но это не сработало.

  2. Как я могу получить текущий SECURE-адрес страницы?

    {{ Request::url() }} возвращается http://example.com/page, но я хочу https://example.com/page

В мета, пожалуйста, дайте мне знать, если у вас есть какие-либо предложения по улучшению моего текущего метода ОГА.

ответ

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-теги, как это:

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()) 

Если вы хотите всегда иметь og_tags (в случае, если ваше мнение не определяет этот раздел и вы хотите, чтобы показать те, по умолчанию), вы можете просто изменить свой app.blade.PHP так:

<title>@yield('title')</title> 
@section('ogtags') 
    @include('og_tags') 
@show 

Это прохладное часть Blade, что вы можете разделить все на более мелкие части, а затем включить их с динамическими параметрами, или просто создать вид композиторов для обработки данных.

0

Я всегда использую 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.