Laravel 4 how to apply title and meta information to each page with blade master page

25,938

Solution 1

This works as well:

master.blade.php

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

individual page

@extends('layouts.master')

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

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

@section('content')

or if you want to shorten that some more, alternately do this:

individual page

@extends('layouts.master')

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

@section('content')

Solution 2

This should work:

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

...

You can also do this:

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

Solution 3

Really recommend this:

https://github.com/artesaos/seotools

You pass the information to the the view require the content

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

Solution 4

no one think that the best way is to create your own class with facade (Site::title(), Site::description etc) and mutators (via Str::macro) that automatically check if title, description etc is in right format (max length, adding categories, defaults, separators, etc) and clone data to others fields (title => og:title, description => og:description) if necessary?

Share:
25,938
Mitch
Author by

Mitch

Updated on March 06, 2020

Comments

  • Mitch
    Mitch about 4 years

    Trying to apply an individual title and meta description to my websites pages, but I'm not sure if the way I'm attempting is very clean.

    master.blade.php

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

    individual page

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

    I feel like this is a quick and dirty way to get the job done, is there a cleaner way?