速習Larave3(その11)、メインメニュー
タグ: Laravel3
今回は小ネタを一つ。メニューを作りましょう。左側がスカスカなのに気が付きましたか?ナビゲーションの領域が空いているので、そこにメニューを付けて操作性をあげましょう。
- ソース:github
まあ、実のところ最初から付けても良かったんですが、そうするとステップごとに項目を付けたり、消したり、変えたりと手間が増えるので、後回しにしました。
そろそろ、機能的には揃ってきたので、この時点で作成することにしましょう。もちろん、皆さんが作成する場合には、最初から付けておきましょう。自分が作成するWebアプリの一番のユーザーにならなければ、良い所も、悪いところも見つけづらいですからね。(でも、固執してはいけません。自分のやり方が一番だと固執しているがために、オープンソースではすったもんだが絶えません。現実の社会で、いくらあなたの方法が優れていても、顧客の要望に答えなければ、お金にはならないでしょう。)
さて、どうやりましょうか。もちろん、全ページで表示するものですから、レイアウトに入れましょう。template.blade.php
でしたね。
<!doctype html> <html lang="ja"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <title>@yield('title')</title> <meta name="viewport" content="width=device-width"> {{ HTML::style('laravel/css/style.css') }} </head> <body> <div class="wrapper"> <header> <h1>ミニブログ</h1> <h2>@yield('title')</h2> <p class="intro-text" style="margin-top: 45px;"> </p> </header> <div> @if ( $warning ) <div style="color: red;"> {{ $warning }} </div> @endif @if ( $message ) <div style="color: green;"> {{ $message }} </div> @endif </div> <div class="sidebar"> <h3>メニュー</h3> <ul> @section('sidenavi') <li>{{ HTML::link_to_route('post-index', 'ホーム') }}</li> @if( Auth::guest() ) <li>{{ HTML::link_to_route('login','ログイン') }}</li> @else <li>{{ HTML::link_to_route('post-edit', '記事追加') }}</li> <li>{{ HTML::link_to_route('logout', 'ログアウト') }}</li> @endif @yield_section </ul> </div> <div role="main" class="main"> <div class="home"> @yield('content') </div> </div> </div> </body> </html>
新しい、Bladeの使い方が出てきました。@section()
と@yield_section
です。それ以外は、既に学んだ内容です。
今まで、レイアウト上で@yield()
を使用し、呼び出し側のビューで定義したセクションを取り込む場所を指定してきました。今回の記述法は、場所を指定すると同時に内容も指定する方法です。
もし、呼び出し側のビューでそのセクションを定義していない場合、デフォルトとして@section
と@yield_section
の間の内容が表示されます。
呼び出し側のビューで、そのセクションの内容を定義した場合、ビューで定義した内容で表示されます。
つまり、ビューで指定しなくても全ページに表示されつつ、変更したいのであれば指定してもいいよというわけです。便利ですね。
更に、レイアウトで指定した内容は表示しつつ、ビュー独自の内容を付け加えたい場合は、そのビューで以下のように定義します。
@section('sidenavi') @parent {{ HTML::lint_to_route(...)}} {{ HTML::lint_to_route(...)}} @endsection
@parent
の部分がレイアウトで定義された内容です。つまりこの場合、デフォルトの内容の下に、このビュー独自の項目が付け加えられます。