blackdrago / laracrumbs
Laracrumbs为Laravel提供数据库驱动的面包屑导航。
Requires
- laravel/framework: ^5.3
This package is not auto-updated.
Last update: 2024-10-02 10:10:26 UTC
README
为Laravel提供的数据库驱动的面包屑导航包。
1. 要求
- Laravel 5.6(未测试与Laravel 5.0到Laravel 5.5的兼容性)
- Laravel Mix
2. 安装
2.1. 通过Composer安装
通过composer安装
composer require blackdrago/laracrumbs
然后编辑应用的config/app.php文件并添加以下内容
'providers' => [ // ... Laracrumbs\ServiceProvider::class, // ... ], // ... 'aliases' => [ // ... 'Laracrumbs' => Laracrumbs\Facades\Laracrumbs::class, // ... ],
运行以下命令
php artisan config:cache
php artisan vendor:publish --provider="Laracrumbs\ServiceProvider" --tag=config
composer dump-autoload
php artisan migrate --path=vendor/blackdrago/laracrumbs/src/database/migrations/
创建一个名为routes/laracrumbs.php的文件并定义应用的Laracrumbs。(见下文。)
2.2. 配置
Laracrumbs有多个配置设置,包括
- translation_key:用于翻译语言键值的包前缀
- template:用于面包屑的Blade模板名称
- absolute_paths:布尔标志,指示是否使用绝对路径进行路由
3. 创建Laracrumbs
有三种类型的Laracrumbs
- 基本:没有参数的链接或路由的面包屑。
- 复杂:至少有一个参数的路由的面包屑。
- 非链接:作为分类或标记但没有任何链接的面包屑。
最佳方式是通过创建一个可以与应用程序捆绑的新数据库 Seeder 来创建这些。
php artisan make:seeder LaracrumbsSeeder
这将创建一个名为 database/seeds/LaracrumbSeeder.php 的文件,可以在其中进行各种Laracrumbs注册。完成后,只需运行种子命令
php artisan db:seed --class=LaracrumbsSeeder
注意:如果您收到有关Laravel找不到种子类的错误,请尝试运行以下命令
composer dump-autoload
然后再次运行种子命令。
处理Laracrumbs注册的另一种方法是创建一个 Laracrumbs注册文件(例如,routes/laracrumbs.php)并将config/laracrumbs.php文件中的设置更新为指向此文件。
3.1. 创建基本Laracrumb
基本Laracrumb可以是链接或没有参数的路由。
路由
Laracrumbs::register([ 'link' => url(route('home')), 'display_text' => 'Home', ]); Laracrumbs::register([ 'link' => url(route('browse')), 'display_text' => 'Browse', 'parent_id' => Laracrumb::findByLink(route('home'))->parent_id ]);
链接
Laracrumbs::register([ 'link' => 'http://www.example.com', 'display_text' => 'Grandparent site', ]); Laracrumbs::register([ 'link' => 'http://www.anotherexample.com', 'display_text' => 'Parent site', 'parent_id' => Laracrumb::findByLink('http://www.example.com')->parent_id ]);
3.2. 创建复杂Laracrumb
具有参数的路由需要复杂Laracrumbs。由于至少有一个参数的路由可以生成多个URL,因此复杂Laracrumbs需要一个映射函数。
例如,假设有两个模型:Category和Product。还有两个相应的“详情视图”路由。注册它们将如下所示
Laracrumbs::register([ 'route_name' => 'category-view', 'map' => 'category_laracrumb' ]); Laracrumbs::register([ 'route_name' => 'product-view', 'map' => 'product_laracrumb' ]);
如果更愿意,可以使用类中的函数代替
Laracrumbs::register([ 'route_name' => 'category-view', 'map' => '\App\Models\Category::laracrumb' ]); Laracrumbs::register([ 'route_name' => 'product-view', 'map' => '\App\Models\Product::laracrumb' ]);
一个复杂Laracrumb映射函数的示例,用于具有Home作为父级的Category模型
function category_laracrumb($route, $link) { $params = $route->parameters(); $category = \App\Models\Category::find((int)($params['id'])); if (!is_null($category)) { $laracrumb = new \Laracrumbs\Models\Laracrumb(); $laracrumb->link = $link; $laracrumb->display_text = $category->name; $laracrumb->parent_id = \Laracrumbs::findParentId('home'); $laracrumb->save(); return $laracrumb; } return null; }
另一个示例,用于Product模型。其父级是$product->category_id指定的Category。
function product_laracrumb($route, $link) { $params = $route->parameters(); $product = \App\Models\Product::find((int)($params['id'])); if (!is_null($product)) { $laracrumb = new \Laracrumbs\Models\Laracrumb(); $laracrumb->link = $link; $laracrumb->display_text = $product->name; $laracrumb->parent_id = \Laracrumbs::findParentId('category-view', ['id' => $product->category_id]); $laracrumb->save(); return $laracrumb; } return null; }
3.3. 创建非链接Laracrumb
非链接Laracrumb没有与路由或链接相关联,而是作为标记或分类。
非链接Laracrumb的示例
Laracrumbs::register([ 'display_text' => 'Getting Started', ]); Laracrumbs::register([ 'display_text' => 'Markup Tutorial', 'parent_id' => Laracrumbs::findParentIdByDisplayText('Getting Started') ]);
4. 显示Laracrumbs
如果您没有直接数据库访问权限(或者您不想使用它),可以使用以下控制台命令来检测当前注册的Laracrumbs
php artisan laracrumbs:show
这将显示所有现有/保存的Laracrumbs以及所有已注册的路由映射。
5. 配置设置
发布后,您的应用程序中将有 config/laracrumbs.php 文件。这些设置使您能够自定义Laracrumbs。
5.1. 服务配置设置
- files:包含Laracrumb注册的一个或多个文件(如果存在)
- translation_key:本地化(如果存在)的语言包/域键
- 模板:用于渲染Laracrumbs的Blade模板名称
- absolute_paths:布尔标志,表示是否使用绝对URL
5.2. 视图配置设置
- separator:出现在laracrumbs之间的HTML标记
- class_wrapper:包含整个laracrumbs显示的CSS类
- class_item:包含单个laracrumb的CSS类
- class_list:包含laracrumb列表的CSS类
- class_list_item:包含每个laracrumb列表项的CSS类
请注意,分隔符可以是任何HTML标记。默认情况下是raquo(») HTML特殊字符。然而,如果您的应用程序使用类似FontAwesome的东西,您可以更改分隔符,使其看起来像这样
'separator' => '<i class="fa fa-chevron-right" aria-hidden="true"></i>',