Overview
Most commonly this section/yield approach is used to create a global area in your layout that can be changed by your templates. This eliminates the need for any brittle and messy logic.
Cheatsheet:
-
No thank you:
{{ if template == "news" }} hardcode something {{ /if }}
-
Yes please:
{{ yield:something }}
+{{ section:something }}
Example
In the example below, everything within the section:sidebar
tag will not be rendered in the template, but rather in the layout.
// The Template <h1>{{ title }}</h1>{{ content }} {{ section:sidebar }} <h2>About the Author</h2> <div> {{ author:name }} </div> {{ author:bio }}{{ /section:sidebar }}
// The Layout<html> <head> <title>{{ title }} | {{ site_name }}</title> </head> <body> <article> {{ template_content }} </article> <aside> {{ yield:sidebar }} </aside> </body></html>
// The template@extends('layout') <h1>{{ $title }}</h1>{!! $content !!} @section('sidebar') <h2>About the Author</h2> <div> {{ $author['name'] }} </div> {{ $author['bio'] }}@stop
// The Layout<html> <head> <title>{{ $title }} | {{ $site_name }}</title> </head> <body> <article> {!! $template_content !!} </article> <aside> @yield('sidebar') </aside> </body></html>
Fallback Content
If no section is being pushed into the yield, you may display fallback content by using the tag as a pair.
<aside> {{ yield:sidebar }} <img src="/img/CLIPPY.GIF"> <p>Hi! It looks like you're building a website. Would you like help?</p> {{ /yield:sidebar }}</aside>
// The Layout<aside> @section('sidebar') <img src="/img/CLIPPY.GIF"> <p>Hi! It looks like you're building a website. Would you like help?</p> @show</aside>
// The Template@extends('layout') // The following would override the default content:@section('sidebar') I would override the default!@endsection
Related Reading
If you haven't read up on templates and layouts, you should. It's relevant.