Полный цикл в digital

Хлебные крошки

Чтобы добавить хлебные крошки в проект Laravel, будем использовать пакет diglactic/laravel-breadcrumbs. Я использовал его в довольно большом количестве проектов, начиная от небольших веб-сайтов и заканчивая довольно большими приложениями.

Установка и настройка

Начнем с установки пакета с помощью Composer используя следующею команду:

composer require diglactic/laravel-breadcrumbs

Когда мы установили пакет, можем опубликовать файл конфигурации в директории config/breadcrumbs.php, используется для редактирования конфигурации пакета. В этой конкретной статье нас будет беспокоить только view параметр в файле конфигурации. Для добавления конфига, выполните следующую команду:

php artisan vendor:publish --tag=breadcrumbs-config

Шаблон вывода

По умолчанию, вывод хлебных крошек на страницу, стилизуется с помощью Bootstrap 5, мы будем использовать свой код.

Создаем новый файл resources/views/partials/breadcrumbs.blade.php, используя небольшой шаблон с которым можно начать работу:

resources/views/partials/breadcrumbs.blade.php<ul class="breadcrumb">
    @foreach ($breadcrumbs as $breadcrumb)
        @if (!is_null($breadcrumb->url) && !$loop->last)
            <li><a href="{{ $breadcrumb->url }}">{{ $breadcrumb->title }}</a></li>
        @else
            <li class="active">{{ $breadcrumb->title }}</li>
        @endif
    @endforeach
</ul>

Чтобы использовать собственный шаблон, нужно обновить файл конфигурации. Нам просто нужно изменить view поле, чтобы оно указывало на наш новый файл Blade, который мы только что создали:

config/breadcrumbs.phpreturn [
 
  // ...

  'view' => 'partials/breadcrumbs',

  // ...

];

Пути хлебных крошек

Создайте файл с именем routes/breadcrumbs.php, который выглядит следующим образом:

routes/breadcrumbs.php<?php
// Метод хлебных крошек
Breadcrumbs::for('имя_роута_хлебных_крошек', function ($trail) {
  // Использование ранее вызванных крошек
  $trail->parent('имя_роута_хлебных_крошек');
  // Добавление новых хлебных крошек
  $trail->push('отображаемое_название', route('имя_роута_из_файла_routes/web.php'));
});

Вот пример рабочего шаблона:

routes/breadcrumbs.php<?php
use Diglactic\Breadcrumbs\Breadcrumbs;

// Home
Breadcrumbs::for('home', function ($trail) {
    $trail->push('Home', route('home'));
});
// Home > About
Breadcrumbs::for('about', function ($trail) {
    $trail->parent('home');
    $trail->push('About', route('about'));
});
// Home > Blog
Breadcrumbs::for('blog', function ($trail) {
    $trail->parent('home');
    $trail->push('Blog', route('blog'));
});
// Home > Blog > [Category]
Breadcrumbs::for('category', function ($trail, $category) {
    $trail->parent('blog');
    $trail->push($category->title, route('category', $category->id));
});
// Home > Blog > [Category] > [Post]
Breadcrumbs::for('post', function ($trail, $post) {
    $trail->parent('category', $post->category);
    $trail->push($post->title, route('post', $post->id));
});

Статические страницы

Самой простой хлебной крошкой, будет ваша домашняя страница которая будет выглядеть примерно так:

routes/breadcrumbs.phpuse Diglactic\Breadcrumbs\Breadcrumbs;

Breadcrumbs::for('home', function ($trail) {
  $trail->push('Home', route('home'));
});

Просто вызываете $trail->push($title, $url) внутри замыкания. Для создания URL-адреса можно использовать любой из стандартных методов генерации URL в Laravel:

  • url('path/to/route')
  • secure_url('path/to/route')
  • action('controller@action')( URL::action())
  • route('routename')
  • route('routename', 'param')
  • route('routename', ['param1', 'param2'])

Этот пример будет отображаться следующим образом:

{{ Breadcrumbs::render('home') }}

Результат:

Home

Родительские ссылки

Статическая страница, но перед ней есть родительская ссылка, вызывающие замыкание для home хлебной крошки, определенной выше:

routes/breadcrumbs.phpuse Diglactic\Breadcrumbs\Breadcrumbs;

Breadcrumbs::for('blog', function ($trail) {
  $trail->parent('home');
  $trail->push('Blog', route('blog'));
});
{{ Breadcrumbs::render('blog') }}

Результат:

Home/Blog

Динамические ссылки

Динамически сгенерированная страница, извлеченная из базы данных:

routes/breadcrumbs.phpuse Diglactic\Breadcrumbs\Breadcrumbs;

Breadcrumbs::for('post', function ($trail, $post) {
  $trail->parent('blog');
  $trail->push($post->title, route('post'));
});

Объект $post, это например модель Eloquent, но может быть чем угодно, в данном случае передан из представления, при необходимости можно передать несколько параметров:

{{ Breadcrumbs::render('post', $post) }}

Результат:

Home/Blog/То что пришло из базы

Вложенные категории

Если есть вложенные категории или другие особые требования, вы можете вызывать $trail->push() несколько раз:

routes/breadcrumbs.phpBreadcrumbs::for('category', function ($trail, $category) {
  $trail->parent('blog');
  foreach ($category->ancestors as $ancestor) {
      $trail->push($ancestor->title, route('category', $ancestor->id));
  }
  $trail->push($category->title, route('category', $category->id));
});

В качестве альтернативы вы можете создать рекурсивную функцию:

routes/breadcrumbs.phpBreadcrumbs::for('category', function ($trail, $category) {
  if ($category->parent) {
      $trail->parent('category', $category->parent);
  } else {
      $trail->parent('blog');
  }
  $trail->push($category->title, route('category', $category->slug));
});

Вызов:

{{ Breadcrumbs::render('category', $category) }}

Результат:

Home/Blog/Category/Category/Category

Исключение ошибок

Если хлебной крошки не существует, Laravel выдаст сообщение ошибки. Для отключения, если у вас есть некоторые страницы без хлебных крошек, сначала инициализируйте файл конфигурации, если вы еще этого не сделали:

php artisan vendor:publish --tag=breadcrumbs-config

Затем откройте config/breadcrumbs.php и установите значения указанные ниже.

Используются хлебные крошки привязанные к маршруту, но соответствующий хлебной крошки не существует:

config/breadcrumbs.php'missing-route-bound-breadcrumb-exception' => false,

Используются хлебные крошки с привязкой к маршруту, но у текущего маршрута нет имени:

config/breadcrumbs.php'unnamed-route-exception' => false,

Используется хлебная крошка, но она не существует:

'invalid-named-breadcrumb-exception' => false

Вывод хлебных крошек

В нужном месте вызываем Breadcrumbs::render() для каждой страницы, передав имя используемой навигационной цепочки из файла routes/breadcrumbs.php и любые дополнительные параметры, включая запрос из базы или еще что-то, например:

{{ Breadcrumbs::render('home') }}

{{ Breadcrumbs::render('category', $category) }}
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг