Найти тему
Битрикс и не только

Laravel: хлебные крошки

Всем привет!

Понемногу практикуюсь в 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'))

На этом все. Разумеется это далеко не все возможности данного пакета, больше примеров можно найти в документации.

Спасибо за внимание!