Всем привет!
Понемногу практикуюсь в Laravel, буду публиковать применяемые трюки и методики.
В этой публикации расскажу про пакеты для работы с хлебными крошками.
Для начала установим пакет davejamesmiller/laravel-breadcrumbs, используя composer:
composer require davejamesmiller/laravel-breadcrumbs
Для того, чтобы в папке конфигов создался файл конфига для хлебных крошек, выполним команду:
php artisan vendor:publish --tag=breadcrumbs-config
В данном конфиге можно установить настройки отображения крошек, по умолчанию это будет bootstrap4
'view' => 'breadcrumbs::bootstrap4',
Доступные варианты отображения и другие настройки можно найти в официальной документации на гитхабе
В папке routes создадим файл breadcrumbs.php, в него будем записывать все используемые маршруты хлебных крошек. Для начала создадим маршрут для главной страницы
Breadcrumbs::for('home', function ($breadcrumbs) {
$breadcrumbs->push(config('app.name'), route('home'));
});
Попробуем вывести для главной странице. В основном лэйауте добавим нужное нам место
@yield('breadcrumbs')
Таким образом мы дадим возможность использовать страницы без крошек, просто не заполняя для них раздел breadcrumbs в нужных view
Во view для главной страницы добавим section
@section('breadcrumbs', Breadcrumbs::render('home'))
Далее сделаем роуты для новостей. У меня есть основные маршруты для web news.index(главная страница новостей) и news.show (для просмотра детальной страницы новости), они будут использоваться в маршрутах для хлебных крошек
Breadcrumbs::for('news', function ($breadcrumbs) {
$breadcrumbs->parent('home');
$breadcrumbs->push('Новости', route('news.index'));
});
Breadcrumbs::for('news_show', function ($breadcrumbs, $newsItem) {
$breadcrumbs->parent('news');
$breadcrumbs->push($newsItem->title, route('news.show', $newsItem->slug));
});
Можно добавить разделы, если Вы их используете, примеры можно так же найти в документации.
Для меня важной задачей было использовать собственные шаблоны отображения. Для этого создадим в папке resourse/view папку includes, в дальнейшем в неё будем помещать различные включаемые области. Создадим в данной папке файл breadcrumbs.blade.php и в нем разместим простую верстку:
@if (count($breadcrumbs))
<ol class="breadcrumb">
@foreach ($breadcrumbs as $breadcrumb)
@if ($breadcrumb->url && !$loop->last)
<li class="breadcrumb-item"><a href="{{ $breadcrumb->url }}">{{ $breadcrumb->title }}</a></li>
@else
<li class="breadcrumb-item active">{{ $breadcrumb->title }}</li>
@endif
@endforeach
</ol>
@endif
В конфиг breadcrumbs необходимо добавить путь к используемому файлу:
view' => 'includes.breadcrumbs',
А на view новостей добавим раздел крошек
@section('breadcrumbs', Breadcrumbs::render('news'))
На этом все. Разумеется это далеко не все возможности данного пакета, больше примеров можно найти в документации.
Спасибо за внимание!