見出し画像

Laravel でタイトル、meta情報等を共通化する方法

今回はLaravelでタイトルやmeta情報を共通化する方法を記載します。Laravelでは、デフォルトでtitleが「Laravel」と表示されますのでこちらを変更します。

タイトルを共通化する

1 .envファイルの修正

.envファイルに記載されているの下記部分を修正します。Laravelの箇所をお好きなタイトルに変更します。

APP_NAME=Laravel

Laravelの箇所をお好きなタイトルに変更します。今回はtestに変更しました。

APP_NAME=test


2 bladeファイルを修正する

bladeファイルのtitleの箇所を下記に修正します。

<title>{{ config('app.name') }}</title>

以上で変更終了です。ソースを見ると変更されているのが確認できます。

スクリーンショット 2019-10-22 4.50.14


ページごとにタイトルを変更する方法

上記の場合、全てのページで同じタイトルになります。こちらをページごとに変更するように修正します。

1 bladeファイルのtitle修正

bladeファイルのtitleの箇所を下記のように修正します。

<title>@yield('title') | {{ config('app.name') }}</title>

また、各ページのbladeファイルにて下記のように記載します。

@section('title', '個別のページタイトル')

以上でページごとにタイトルが変更できるようになります。


@section('title')が記載されていない場合はconfig('app.name')のみ表示させるようにする

以上でtitleの共通化は終了なのですが、このままだと@section('title')が記載されていない場合は「|test」のように表示されてしまいます。こちらを修正します。

Laravelでは、セクションがコンテンツを持っているかを判定したい場合は、@hasSectionディレクティブを使用します。下記のように記載します。

@hasSection('title')
    <title>@yield('title') | {{ config('app.name') }}</title>
@else
    <title>{{ config('app.name') }}</title>
@endif

これで、@section('title')が記載されていない場合はconfig('app.name')のみ表示されるようになりました。


META情報についても同様の手順で対応可能です。

1. bladeファイルに下記記載し、

@hasSection('description')
    <meta name="description" itemprop="description" content="@yield('description')">
@else
    <meta name="description" itemprop="description" content="Laravel testサイト">
@endif

2. @section('description')を追記します。

@section('description', 'Laravel個別ページです。')


以上です。

読んでいただきありがとうございます。