atstudio-tech/breadcrumbs

为 Laravel 提供的另一个面包屑组件:简单易用。

v3.0.2 2023-02-26 16:56 UTC

This package is auto-updated.

Last update: 2024-09-08 08:06:19 UTC


README

Latest Version on Packagist Total Downloads

对较旧的 Laravel 包的完整重写,让您可以快速轻松地构建面包屑。

public function show(Post $post) {
    crumbs('Posts', '/posts')->add('Show Post #3', 'posts.show', 3);
}
<section>
    @crumbs
</section>

<main>Main Content</main>

安装

您可以通过在控制台运行以下命令来安装该软件包

composer require atstudio-tech/breadcrumbs

服务提供者将被自动发现,因此无需手动将其添加到您的 /config/app.php 文件中。

供应商文件

您可以使用以下命令发布配置和视图文件

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

用法

有兩個不同的地方可以填充面包屑列表

  1. 在您的路由文件中,例如 web.php
  2. 直接在您的路由动作中,例如闭包或控制器。

路由文件

use ATStudio\Breadcrumbs\Breadcrumbs;

Route::get('posts', [PostController::class, 'index'])->crumbs(function (Breadcrumbs $crumbs) {
    $crumbs->add('Posts', '/posts'); // Here we are using a hard-coded URL
});

使用此方法,您可以从路由声明中解脱出来,但是我们不能访问路由参数。在这种情况下,我们可以在控制器中放置面包屑声明。

此路由宏与 crumbs 辅助函数具有相同的签名。

控制器

public function show(Post $post) {
    crumbs('Posts', '/posts')->add('Show Post #3', 'posts.show', [3]); // The third parameter can also be a primitive: `add(..., ..., 3)`
}

这样,您可以使用路由参数来构建您的面包屑,例如显示资源的 ID。

表示法

还有三种不同的方法来构建面包屑列表

面包屑类

use ATStudio\Breadcrumbs\Breadcrumbs;

public function show(Post $post, Breadcrumbs $crumbs) {
    $crumbs->add('Show Post #3', 'posts.show', [3]);
}

use ATStudio\Breadcrumbs\Breadcrumbs;

public function show(Post $post) {
    Breadcrumbs::instance()->add('Show Post #3', 'posts.show', [3]);
}

面包屑外观

use ATStudio\Breadcrumbs\Facades\Crumbs;

public function show(Post $post) {
    Crumbs::add('Show Post #3', 'posts.show', [3]);
}

辅助函数

这是我们迄今为止使用的函数

public function show(Post $post) {
    crumbs()->add('Show Post #3', 'posts.show', [3]);
}

如果没有传递任何参数,该函数将返回主 Breadcrumbs 类的实例。

渲染

您可以通过在 Blade 视图中调用 crumbs()->render() 或使用自定义指令来渲染面包屑列表

<section>
    {{ crumbs()->render() }}
</section>

<!-- or -->

<section>
    @crumbs
</section>

两种表示法都接受一个可选参数 $view

  • crumbs()->render('breadcrumbs::custom-view')
  • @crumbs(breadcrumbs::custom-view)

您可以通过运行以下命令来自定义已存在的视图,该视图包含在软件包中

php artisan vendor:publish --tag="breadcrumbs-views"

或指定一个自定义视图在 config('breadcrumbs.view') 中。

视图自定义

假设我们想为我们的面包屑创建一个全新的视图。我们首先在 resources/views/vendor/breadcrumbs/custom-theme.blade.php 中创建一个新的 Blade 文件(我更喜欢将自定义视图放入 vendor 文件夹中,但您可以在 resources/views 文件夹中的任何地方放置它们,只要它们在文件夹内即可)。

让我们看看默认的视图文件(resources/views/vendor/breadcrumbs/plain.blade.php

<nav aria-label="Breadcrumb">
    <ol role="list" style="display: flex; align-items: center; gap: 1rem">
        @foreach ($breadcrumbs as $breadcrumb)
            @if (!$loop->first)
                <li>/</li>
            @endif
    
            @if ($breadcrumb->active)
                <li>{{ $breadcrumb->title }}</li>
            @else
                <a href="{{ $breadcrumb->path }}">
                    {{ $breadcrumb->title }}
                </a>
            @endif
        @endforeach
    </ol>
</nav>

以下几点需要注意

  • $breadcrumbs 将自动传递给视图。这是 Breadcrumbs 类的实例。您也可以调用 $breadcrumbs->all(),它与上面的相同。
  • $breadcrumb->active 是一个计算属性,当面包屑的路径与当前 URL 相同时,它简单地返回 true

API

Breadcrumbs::add(string|array $title, ?string $path = null, mixed $params = null)

面包屑需要一个标题。

如果没有提供 $path,将使用当前 URL。 $path 可以是相对 URL,它将被转换为绝对链接,或者是一个路由名称。如果是路由名称,您还可以使用第三个参数 $params

$title 接受字符串和数组。如果是数组,它必须包含以下键

[
    'title' => '',
    'path' => '',
    'params' => [], // optional
]

crumbs(string|array|callable|null $title = null, ?string $path = null, mixed $params = null)

如果您调用此辅助函数而不带任何参数,它将简单地返回一个 Breadcrumbs 的实例,如上所述。否则,它接受与 Breadcrumbs::add() 相同的参数。

仅针对此功能,$title参数也接受一个闭包(同上,Route::crumbs()宏也是如此,如上例所示)

use ATStudio\Breadcrumbs\Breadcrumbs;

public function show(Post $post) {
    crumbs(function (Breadcrumbs $crumbs) {
        $crumbs->add('All Posts', 'posts.index');
        $crumbs->add('Show Post #1', 'posts.show', 1);
    });
}

面包屑项

单个面包屑项具有titlepathactive属性。

变更日志

查看变更日志文件,了解此包的所有变更。

贡献

请参阅贡献指南以获取详细信息。

鸣谢

许可证

MIT许可证(MIT)。请参阅许可证文件以获取更多信息。