エンジニアのひよこ_level10

毎日更新してた人。たまに記事書きます。

【個人サイト制作記3】Laravelのbladeでページのパーツを分けよう【421日目】

ブログのパーツを分けていこう

f:id:willow710kut:20181208211300p:plain

画像の感じだと、画面の上の方の黒いバー、これが使い回されているのがわかる。

ってことで、Laravelのbladeで、いい感じに使い回されるように書いてみよう。

パーツを分けよう

  1. ベースとなるすべてで使うパーツ(タイトルとか。)
  2. 黒いナビゲーションバー
  3. コンテンツ

ベース-(継承)->コンテンツ-(流用)->ナビゲーション

これで、コンテンツでナビゲーションを呼び出すので、ナビゲーションファイルは一つでよき。

ベースパーツ

<!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タグ書かなくてもいいし、ナビゲーションバーも流用できます。

再利用しよう

コピペが多いな?って思ったら、どんどん切り分けして、再利用できるようにしよー!