
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>
以上で変更終了です。ソースを見ると変更されているのが確認できます。
ページごとにタイトルを変更する方法
上記の場合、全てのページで同じタイトルになります。こちらをページごとに変更するように修正します。
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個別ページです。')
以上です。