今回はLaravelでのパンくずリスト実装方法を紹介する。
なお、ここで紹介するパンくずリストは、2階層以上の可変する階層への対応と、構造化データマークアップに対応するものだ。
コンテンツ
パッケージのインストール
パンくずリストくらい自分で実装しても良いのだが、composerでパッケージをインストールする方が早い。
以下のコマンドをターミナルで実行。
composer require diglactic/laravel-breadcrumbs
環境によってはインストール時に、メモリオーバーによるエラーが発生することがあるので、その場合はCOMPOSER_MEMORY_LIMIT=-1
を追記してインストールをおこなう。
COMPOSER_MEMORY_LIMIT=-1 composer require diglactic/laravel-breadcrumbs
パンくず定義ファイルの作成
次に/routes
ディレクトリ内にbreadcrumbs.php
という名前のファイルを作成。
このファイル内にパンくずリストを定義していくことになる。
なお前述のとおり、可変する階層に対応できるパンくずリストを定義するが、まずはパンくずのルートとなるトップページ(Home)のパンくずを定義するところから始める。
以下のパンくずを定義しよう。
<?php
// Home
Breadcrumbs::for('home', function ($trail) {
$trail->push('Home', route('home'));
});
次に、可変する階層に対応できるunder_layer
という名前のパンくずを定義。
<?php
// Home
Breadcrumbs::for('home', function ($trail) {
$trail->push('Home', route('home'));
});
// Home > level1 > level2 > ...
Breadcrumbs::for('under_layer', function ($trail, $under_layers = []) {
$trail->parent('home');
foreach ($under_layers as $layer) {
$trail->push($layer['title'], $layer['route'] ? $layer['route'] : null);
}
});
これでパンくずリストを使う準備は完了だ。
ビューファイルでパンくずリストを表示
ビューとなるbladeファイルで、パンくずリストの出力をおこなう。
{{ Breadcrumbs::render('under_layer', [
['title' => 'カート', 'route' => route('cart')],
['title' => '注文手続き', 'route' => route('shopping')],
]) }}
出力はBreadcrumbs::render
でおこなうが、階層のあるページの場合は第二引数に配列としてページ情報を渡してやれば良い。
※routeはサイトにより別途定義する必要あり
先ほど定義したunder_layer
パンくずリスト側で、渡された配列に対しループ処理をかけ、可変する階層に対応できるようになっている。
構造化データマークアップに対応させる
デフォルトでは非対応となっているため、追加でパンくずリストを構造化データマークアップに対応させる。
まず、Composerでインストールした今回のパンくずリストは、テンプレートがvendor
フォルダ内に存在するため、以下のコマンドを実行してテンプレートをconfig
フォルダへコピーする。
php artisan vendor:publish --tag=breadcrumbs-config
これでconfig/breadcrumbs.php
が生成されるはずだ。
次にオリジナルのテンプレートを作成する。
今回はresources/views/blocks/breadcrumbs.blade.php
にファイルを作成した。
ファイル内に以下のコードを記述しよう。
※おそらくどの環境でもコピペでそのまま使えるはず
@unless ($breadcrumbs->isEmpty())
<ol itemscope itemtype="https://schema.org/BreadcrumbList" class="breadcrumb">
@foreach ($breadcrumbs as $breadcrumb)
@if (!is_null($breadcrumb->url) && !$loop->last)
<li itemprop="itemListElement" itemscope
itemtype="https://schema.org/ListItem"
class="breadcrumb-item">
<a itemprop="item" href="{{ $breadcrumb->url }}">
<span itemprop="name">
{{ $breadcrumb->title }}
</span>
</a>
<meta itemprop="position" content="{{ $loop->index + 1 }}" />
</li>
@else
<li itemprop="itemListElement" itemscope
itemtype="https://schema.org/ListItem"
class="breadcrumb-item active">
<span itemprop="name">
{{ $breadcrumb->title }}
</span>
<meta itemprop="position" content="{{ $loop->index + 1 }}" />
</li>
@endif
@endforeach
</ol>
@endunless
オリジナルテンプレートの用意ができたら、先ほど作成したconfig/breadcrumbs.php
のview
の部分を以下のように変更する。
// 'view' => 'breadcrumbs::bootstrap5',
'view' => 'blocks.breadcrumbs', #--> resources/views/blocks/breadcrumbs.blade.php
configファイルを変更したので、変更を反映させるために以下のコマンドを実行。
php artisan config:clear
これでLaravelのパンくずリストを構造化データマークアップに対応させることができた。