ブログのパーツを分けていこう
画像の感じだと、画面の上の方の黒いバー、これが使い回されているのがわかる。
ってことで、Laravelのbladeで、いい感じに使い回されるように書いてみよう。
パーツを分けよう
- ベースとなるすべてで使うパーツ(タイトルとか。)
- 黒いナビゲーションバー
- コンテンツ
ベース-(継承)->コンテンツ-(流用)->ナビゲーション
これで、コンテンツでナビゲーションを呼び出すので、ナビゲーションファイルは一つでよき。
ベースパーツ
<!DOCTYPE html> <html lang="{{ str_replace('_', '-', app()->getLocale()) }}"> <head> @include('layouts._ga_tag') <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- CSRF Token --> <meta name="csrf-token" content="{{ csrf_token() }}"> <title>@yield('title')</title> <!-- Scripts --> <script src="{{ asset('js/app.js') }}" defer></script> <!-- Fonts --> <link rel="dns-prefetch" href="https://fonts.gstatic.com"> <link href="https://fonts.googleapis.com/css?family=Nunito" rel="stylesheet" type="text/css"> <!-- Styles --> <link href="{{ asset('css/app.css') }}" rel="stylesheet"> @yield('add_head') </head> <body> <div id="app"> <nav class="navbar navbar-expand-md navbar-dark fixed-top bg-dark"> @yield('nav') </nav> <div class="pt-5"> <main class="py-2"> @yield('content') </main> </div> <footer class="container"> @include('layouts._footer') </footer> </div> @yield('add_before_end_of_body') </body> </html>
こんな感じ。
@includeで、他のファイルを読み込んで、突っ込む。
@yieldの部分は、継承したときに、中に突っ込める。
この場合、コンテンツの方が、このレイアウトを継承して、そこにコンテンツを入れる。
ファイル見るほうが早いかも
コンテンツ
@extends('layouts._default') @section('title') throw new NoOutputException @endsection @section('nav') // ナビゲーションバーをここで読み込ませる @include('layouts._nav', ['active' => 'top']) @endsection @section('content') //ここらへんでいろいろコンテンツを切り替える。 @endsection
extendsで上に書いたコードを読み込み、sectionでyieldに代入する。
こうすることで、毎回レイアウトをextendsすれば、毎回metaタグ書かなくてもいいし、ナビゲーションバーも流用できます。
再利用しよう
コピペが多いな?って思ったら、どんどん切り分けして、再利用できるようにしよー!