2014-02-15 6 views
27

Ich versuche, einen individuellen Titel und eine Meta-Beschreibung auf meine Webseiten anzuwenden, aber ich bin mir nicht sicher, ob meine Vorgehensweise sehr sauber ist.Laravel 4 Anwenden von Titel- und Metainformationen auf jede Seite mit Blade-Masterseite

master.blade.php

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <title>{{ $title }}</title> 
    <meta name="description" content="{{ $description }}"> 
</head> 

einzelne Seite

@extends('layouts.master') 
<?php $title = "This is an individual page title"; ?> 
<?php $description = "This is a description"; ?> 

@section('content') 

ich so das Gefühl ist eine schnelle und schmutzige Art und Weise die Arbeit zu erledigen, gibt es eine sauberere Weg ?

Antwort

85

Dies funktioniert auch:

master.blade.php

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <title>@yield('title')</title> 
    <meta name="description" content="@yield('description')"> 
</head> 

einzelne Seite

@extends('layouts.master') 

@section('title') 
    This is an individual page title 
@stop 

@section('description') 
    This is a description 
@stop 

@section('content') 

oder wenn Sie wollen verkürzen, dass einige mehr, abwechselnd tun dies:

einzelne Seite

@extends('layouts.master') 

@section('title', 'This is an individual page title') 
@section('description', 'This is a description') 

@section('content') 
+2

Dies sollte die akzeptierte Antwort sein. – roastedtoast

+1

Dies ist eine viel bessere Antwort. –

+0

Ich würde ein '@if (! Leer ($ description)) .. @ endif' um das Meta-Tag setzen. Nur um ein Meta-Tag mit einer leeren Beschreibung zu vermeiden. – Adam

8

Dies sollte funktionieren:

@extends('layouts.master') 
<?php View::share('title', 'title'); ?> 

... 

Sie können dies auch tun:

@extends('views.coming-soon.layout', ['title' => 'This is an individual page title']) 
+0

Interessant, was das 'View :: share(); '? Kann ich das Gleiche für die Metabeschreibung tun? –

+0

Diese Variablen werden instanziiert, damit sie an jedem beliebigen Ort in Ihrem Layout oder in Ihren Unteransichten verwendet werden können. –

+0

Während diese Methode zu funktionieren scheint (danke an Antonio, ich wusste nicht, dass Sie ein Array mit '@ extends 'übergeben können, um Variablen in der Kette zu übergeben), habe ich das Gefühl, dass die allgemeine Idee in diesen Situationen ist,' zu erweitern ' eine Sektion (siehe '@ section' und' @ parent' in [the docs] (http://laravel.com/docs/templates#blade-templating). Das funktioniert viel besser in der Navigation Situationen über Dinge wie den Seitentitel und besonders die Meta-Beschreibung (weil man die Blade-Syntax innerhalb eines HTML-Attributs verwenden muss, das sich wirklich schmutzig anfühlt) – alexrussell

1

niemand denken, dass der beste Weg ist, Ihre eigene Klasse mit Fassade (Site :: Titel() erstellen , Site :: Beschreibung etc) und Mutatoren (über Str :: macro), die automatisch überprüfen, ob Titel, Beschreibung usw. im richtigen Format sind (maximale Länge, Kategorien, Standardwerte, Trennzeichen usw.) und Daten in andere Felder klonen (title = > og: Titel, Beschreibung => og: Beschreibung) wenn nötig?

+1

Könnten Sie das in vereinfachenden, Anfänger-freundlichen Begriffen erweitern? –

+1

Nein, ich Ich denke, das ist nicht der beste Weg. Ich muss noch einen Laravel 4-Standort entwickeln, der eine formale Fassade für die Verwaltung der Ansichtsvariablen benötigt.Ich verstehe die Bedeutung der Faktoren, die Sie erwähnen, aber ich würde argumentieren, dass dies spezielle Bedürfnisse sind und von Fall zu Fall behandelt werden sollten. – bishop

+0

Dies ist ein netter Ansatz, wenn Sie an umfangreichen Anwendungen arbeiten. –

2

wirklich empfehlen:

https://github.com/artesaos/seotools

Sie die Informationen an die passieren die Ansicht erfordern den Inhalt

SEOTools::setTitle($page->seotitle); 
SEOTools::setDescription($page->seodescription); 
Verwandte Themen