Laravelのパンくずリストを実装します(ついでにJSON-LDも出力します)
Laravel5.3でためしています。
超おすすめライブラリです。
環境
Laravel5.3
PHP5.6.x
davejamesmiller/laravel-breadcrumbs(https://github.com/davejamesmiller/laravel-breadcrumbs)
composerでインストール
composer require davejamesmiller/laravel-breadcrumbs
composer.jsonにdavejamesmiller/laravel-breadcrumbsが追加されていることを確認
"require": {
"php": ">=5.6.4",
"laravel/framework": "5.3.*",
"laravelcollective/html": "5.3.*",
"davejamesmiller/laravel-breadcrumbs": "^3.0"
},
config/app.phpに2箇所追記
'providers' => [
DaveJamesMiller\Breadcrumbs\ServiceProvider::class,
],
'aliases' => [
'Breadcrumbs' => DaveJamesMiller\Breadcrumbs\Facade::class,
],
パンくずリストの定義ファイルを作成します。公式ドキュメントにある以下のパスに作成
routes/breadcrumbs.php
<?php
Breadcrumbs::register('home', function($breadcrumbs)
{
$breadcrumbs->push('ホーム', route('home'));
});
Breadcrumbs::register('search', function($breadcrumbs)
{
$breadcrumbs->parent('home');
$breadcrumbs->push('検索', route('search'));
});
テンプレートの作成
config/breadcrumbs.phpを作成
<?php
return [
'view' => 'common/breadcrumbs',
];
続いて、resources/views/common/breadcrumbs.blade.phpを作成
@if ($breadcrumbs)
<ul class="breadcrumb">
@foreach($breadcrumbs as $breadcrumb)
@if(!$breadcrumb->last)
<li><a href="{{ $breadcrumb->url }}">{{ $breadcrumb->title }}</a></li>
@else
<li>{{ $breadcrumb->title }}</li>
@endif
@endforeach
</ul>
@endif
ここまでで準備完了です。実際のテンプレートに記述してみます
テンプレ
resources/views/layouts/base.blade.php
<!DOCTYPE html>
<html lang="ja">
<body>
@yield('breadcrumbs')
</body>
</html>
ページ用のテンプレート
@extends('layouts.base')
@section('breadcrumbs', Breadcrumbs::render('search'))
(略)
結果
引数を渡してみます
routes/breadcrumbs.php
<?php
Breadcrumbs::register('home', function($breadcrumbs)
{
$breadcrumbs->push('ホーム', route('home'));
});
Breadcrumbs::register('search', function($breadcrumbs, $prefecture = null)
{
$breadcrumbs->parent('home');
if(!empty($prefecture)){
$breadcrumbs->push($prefecture->name . 'の検索', '/search/prefecture' . $prefecture->id);
}else{
$breadcrumbs->push('検索', '/search');
}
});
ページ用のテンプレート
@extends('layouts.base')
@section('breadcrumbs', Breadcrumbs::render('search', $prefecture))
(略)
結果
よいですね。
引数は可変長なのでいくつでもわたせます
@section('breadcrumbs', Breadcrumbs::render('search', $prefecture, $city, $town, $keyword))
パンくずを作成したので、JSON-LD(JSON for Linking Data)タグも出してみましょう。
resources/views/common/breadcrumbs.blade.phpに追記します
@if ($breadcrumbs)
<ul class="breadcrumb">
@foreach($breadcrumbs as $breadcrumb)
@if(!$breadcrumb->last)
<li><a href="{{ $breadcrumb->url }}">{{ $breadcrumb->title }}</a></li>
@else
<li>{{ $breadcrumb->title }}</li>
@endif
@endforeach
</ul>
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "BreadcrumbList",
"itemListElement":
[
@foreach($breadcrumbs as $index => $breadcrumb)
{
"@type": "ListItem",
"position": {{ $index + 1 }},
"item":
{
"@id": "{{ $breadcrumb->url }}",
"name": "{{ $breadcrumb->title }}"
}
}
@if(!$breadcrumb->last)
,
@endif
@endforeach
]
}
</script>
@endif
出力結果はGoogleの構造化データチェックツールで確認しましょう
以上、簡単ですね。







