move documentation markdown to system directory.
This commit is contained in:
153
laravel/documentation/views/templating.md
Normal file
153
laravel/documentation/views/templating.md
Normal file
@@ -0,0 +1,153 @@
|
||||
# Templating
|
||||
|
||||
## Contents
|
||||
|
||||
- [The Basics](#the-basics)
|
||||
- [Sections](#sections)
|
||||
- [Blade Template Engine](#blade-template-engine)
|
||||
- [Blade Layouts](#blade-layouts)
|
||||
|
||||
<a name="the-basics"></a>
|
||||
## The Basics
|
||||
|
||||
Your application probably uses a common layout across most of its pages. Manually creating this layout within every controller action can be a pain. Specifying a controller layout will make your develompent much more enjoyable. Here's how to get started:
|
||||
|
||||
#### Specify a "layout" property on your controller:
|
||||
|
||||
class Base_Controller extends Controller {
|
||||
|
||||
public $layout = 'layouts.common';
|
||||
|
||||
}
|
||||
|
||||
#### Access the layout from the controllers' action:
|
||||
|
||||
public function action_profile()
|
||||
{
|
||||
$this->layout->nest('content', 'user.profile');
|
||||
}
|
||||
|
||||
> **Note:** When using layouts, actions do not need to return anything.
|
||||
|
||||
<a name="sections"></a>
|
||||
## Sections
|
||||
|
||||
View sections provide a simple way to inject content into layouts from nested views. For example, perhaps you want to inject a nested view's needed JavaScript into the header of your layout. Let's dig in:
|
||||
|
||||
#### Creating a section within a view:
|
||||
|
||||
<?php Section::start('scripts'); ?>
|
||||
<script src="jquery.js"></script>
|
||||
<?php Section::stop(); ?>
|
||||
|
||||
#### Rendering the contents of a section:
|
||||
|
||||
<head>
|
||||
<?php echo Section::yield('scripts'); ?>
|
||||
</head>
|
||||
|
||||
#### Using Blade short-cuts to work with sections:
|
||||
|
||||
@section('scripts')
|
||||
<script src="jquery.js"></script>
|
||||
@endsection
|
||||
|
||||
<head>
|
||||
@yield('scripts')
|
||||
</head>
|
||||
|
||||
<a name="blade-template-engine"></a>
|
||||
## Blade Template Engine
|
||||
|
||||
Blade makes writing your views pure bliss. To create a blade view, simply name your view file with a ".blade.php" extension. Blade allows you to use beautiful, unobtrusive syntax for writing PHP control structures and echoing data. Here's an example:
|
||||
|
||||
#### Echoing a variable using Blade:
|
||||
|
||||
Hello, {{$name}}.
|
||||
|
||||
#### Rendering a view:
|
||||
|
||||
<h1>Profile</hi>
|
||||
|
||||
@include('user.profile')
|
||||
|
||||
> **Note:** When using the **@include** Blade expression, the view will automatically inherit all of the current view data.
|
||||
|
||||
#### Creating loops using Blade:
|
||||
|
||||
<h1>Comments</h1>
|
||||
|
||||
@foreach ($comments as $comment)
|
||||
The comment body is {{$comment->body}}.
|
||||
@endforeach
|
||||
|
||||
#### Other Blade control structures:
|
||||
|
||||
@if (count($comments) > 0)
|
||||
I have comments!
|
||||
@else
|
||||
I have no comments!
|
||||
@endif
|
||||
|
||||
@for ($i =0; $i < count($comments) - 1; $i++)
|
||||
The comment body is {{$comments[$i]}}
|
||||
@endfor
|
||||
|
||||
@while ($something)
|
||||
I am still looping!
|
||||
@endwhile
|
||||
|
||||
#### The "for-else" control structure:
|
||||
|
||||
@forelse ($posts as $post)
|
||||
{{ $post->body }}
|
||||
@empty
|
||||
There are not posts in the array!
|
||||
@endforelse
|
||||
|
||||
<a name="blade-layouts"></a>
|
||||
## Blade Layouts
|
||||
|
||||
Not only does Blade provide clean, elegant syntax for common PHP control structures, it also gives you a beautiful method of using layouts for your views. For example, perhaps your application uses a "master" view to provide a common look and feel for your application. It may look something like this:
|
||||
|
||||
<html>
|
||||
<ul class="navigation">
|
||||
@section('navigation')
|
||||
<li>Nav Item 1</li>
|
||||
<li>Nav Item 2</li>
|
||||
@yield_section
|
||||
</ul>
|
||||
|
||||
<div class="content">
|
||||
@yield('content')
|
||||
</div>
|
||||
</html>
|
||||
|
||||
Notice the "content" section being yielded. We need to fill this section with some text, so let's make another view that uses this layout:
|
||||
|
||||
@layout('master')
|
||||
|
||||
@section('content')
|
||||
Welcome to the profile page!
|
||||
@endsection
|
||||
|
||||
Great! Now, we can simply return the "profile" view from our route:
|
||||
|
||||
return View::make('profile');
|
||||
|
||||
The profile view will automatically use the "master" template thanks to Blade's **@layout** expression.
|
||||
|
||||
Sometimes you may want to only append to a section of a layout rather than overwrite it. For example, consider the navigation list in our "master" layout. Let's assume we just want to append a new list item. Here's how to do it:
|
||||
|
||||
@layout('master')
|
||||
|
||||
@section('navigation')
|
||||
@parent
|
||||
<li>Nav Item 3</li>
|
||||
@endsection
|
||||
|
||||
@section('content')
|
||||
Welcome to the profile page!
|
||||
@endsection
|
||||
|
||||
Notice the **@parent** Blade construct? It will be replaced with the contents of the layout's navigation section, providing you with a beautiful and powerful method of performing layout extension and inheritance.
|
||||
Reference in New Issue
Block a user