From 9561514271ba3dfdca8bc33354c0f11b49f3abf2 Mon Sep 17 00:00:00 2001 From: Edward Yang Date: Tue, 26 Jul 2022 18:12:33 +0800 Subject: [PATCH] add bread creumb for product --- beike/Helpers.php | 14 +++ beike/Shop/Routes/breadcrumbs.php | 33 +++++ composer.json | 1 + composer.lock | 200 +++++++++++++++++++++--------- config/breadcrumbs.php | 75 +++++++++++ themes/default/category.blade.php | 9 +- themes/default/product.blade.php | 10 +- 7 files changed, 268 insertions(+), 74 deletions(-) create mode 100644 beike/Shop/Routes/breadcrumbs.php create mode 100644 config/breadcrumbs.php diff --git a/beike/Helpers.php b/beike/Helpers.php index b31483c8..32b232ee 100644 --- a/beike/Helpers.php +++ b/beike/Helpers.php @@ -102,6 +102,20 @@ function plugin_route($route, $params = []): string return route('plugin.' . $route, $params); } +/** + * 是否访问的后端 + * @return bool + */ +function is_admin(): bool +{ + $adminName = admin_name(); + $uri = request()->getRequestUri(); + if (Str::startsWith($uri, "/{$adminName}")) { + return true; + } + return false; +} + /** * 是否为当前访问路由 * diff --git a/beike/Shop/Routes/breadcrumbs.php b/beike/Shop/Routes/breadcrumbs.php new file mode 100644 index 00000000..209da3a2 --- /dev/null +++ b/beike/Shop/Routes/breadcrumbs.php @@ -0,0 +1,33 @@ + + * @created 2022-07-26 17:26:37 + * @modified 2022-07-26 17:26:37 + */ + +use Diglactic\Breadcrumbs\Breadcrumbs; +use Diglactic\Breadcrumbs\Generator as BreadcrumbTrail; + +// Home +Breadcrumbs::for('home', function (BreadcrumbTrail $trail) { + $trail->push('首页', shop_route('home.index')); +}); + +// Home > [Category] +Breadcrumbs::for('category', function (BreadcrumbTrail $trail, $category) { + $trail->parent('home'); + $trail->push($category->description->name, shop_route('categories.show', $category)); +}); + +// Home > Category > [Product] +Breadcrumbs::for('product', function (BreadcrumbTrail $trail, $product) { + $productModel = \Beike\Models\Product::query()->find($product['id']); + $category = $productModel->categories->first(); + $trail->parent('category', $category); + $trail->push($product['name'], shop_route('products.show', $productModel)); +}); + diff --git a/composer.json b/composer.json index 7e76ea9a..6cadfa2f 100644 --- a/composer.json +++ b/composer.json @@ -8,6 +8,7 @@ "php": "^7.3|^8.0", "ext-json": "*", "ext-zip": "*", + "diglactic/laravel-breadcrumbs": "^7.2", "fruitcake/laravel-cors": "^2.0", "guzzlehttp/guzzle": "^7.0.1", "intervention/image": "^2.7", diff --git a/composer.lock b/composer.lock index f85f8b1f..2af39ed0 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "9646e182a6e72a01992da9c58f87b3fe", + "content-hash": "a2f9810c5fd9c6583f1bf3fcbb73a7a7", "packages": [ { "name": "asm89/stack-cors", @@ -215,6 +215,83 @@ }, "time": "2021-08-13T13:06:58+00:00" }, + { + "name": "diglactic/laravel-breadcrumbs", + "version": "v7.2.0", + "source": { + "type": "git", + "url": "https://github.com/diglactic/laravel-breadcrumbs.git", + "reference": "309ec597d047b763d1df3c5113a3932cc771500f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/diglactic/laravel-breadcrumbs/zipball/309ec597d047b763d1df3c5113a3932cc771500f", + "reference": "309ec597d047b763d1df3c5113a3932cc771500f", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "facade/ignition-contracts": "^1.0", + "laravel/framework": "^6.0 || ^7.0 || ^8.0 || ^9.0", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "davejamesmiller/laravel-breadcrumbs": "*" + }, + "require-dev": { + "orchestra/testbench": "^4.10 || ^5.9 || ^6.4 || ^7.0", + "php-coveralls/php-coveralls": "^2.4", + "phpunit/phpunit": "^8.5 || ^9.4", + "spatie/phpunit-snapshot-assertions": "^2.2 || ^4.2" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Diglactic\\Breadcrumbs\\ServiceProvider" + ], + "aliases": { + "Breadcrumbs": "Diglactic\\Breadcrumbs\\Breadcrumbs" + } + } + }, + "autoload": { + "psr-4": { + "Diglactic\\Breadcrumbs\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sheng Slogar", + "email": "sheng@diglactic.com", + "role": "Maintainer" + }, + { + "name": "Dave James Miller", + "email": "dave@davejamesmiller.com", + "role": "Original Creator" + } + ], + "description": "A simple Laravel-style way to create breadcrumbs.", + "homepage": "https://github.com/diglactic/laravel-breadcrumbs", + "keywords": [ + "laravel" + ], + "support": { + "issues": "https://github.com/diglactic/laravel-breadcrumbs/issues", + "source": "https://github.com/diglactic/laravel-breadcrumbs/tree/v7.2.0" + }, + "time": "2022-05-03T05:40:37+00:00" + }, { "name": "doctrine/inflector", "version": "2.0.4", @@ -539,6 +616,65 @@ ], "time": "2020-12-29T14:50:06+00:00" }, + { + "name": "facade/ignition-contracts", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/facade/ignition-contracts.git", + "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/facade/ignition-contracts/zipball/3c921a1cdba35b68a7f0ccffc6dffc1995b18267", + "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^v2.15.8", + "phpunit/phpunit": "^9.3.11", + "vimeo/psalm": "^3.17.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Facade\\IgnitionContracts\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://flareapp.io", + "role": "Developer" + } + ], + "description": "Solution contracts for Ignition", + "homepage": "https://github.com/facade/ignition-contracts", + "keywords": [ + "contracts", + "flare", + "ignition" + ], + "support": { + "issues": "https://github.com/facade/ignition-contracts/issues", + "source": "https://github.com/facade/ignition-contracts/tree/1.0.2" + }, + "time": "2020-10-16T08:27:54+00:00" + }, { "name": "fruitcake/laravel-cors", "version": "v2.0.5", @@ -6358,65 +6494,6 @@ }, "time": "2021-12-27T15:11:24+00:00" }, - { - "name": "facade/ignition-contracts", - "version": "1.0.2", - "source": { - "type": "git", - "url": "https://github.com/facade/ignition-contracts.git", - "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/facade/ignition-contracts/zipball/3c921a1cdba35b68a7f0ccffc6dffc1995b18267", - "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267", - "shasum": "", - "mirrors": [ - { - "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", - "preferred": true - } - ] - }, - "require": { - "php": "^7.3|^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^v2.15.8", - "phpunit/phpunit": "^9.3.11", - "vimeo/psalm": "^3.17.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "Facade\\IgnitionContracts\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "homepage": "https://flareapp.io", - "role": "Developer" - } - ], - "description": "Solution contracts for Ignition", - "homepage": "https://github.com/facade/ignition-contracts", - "keywords": [ - "contracts", - "flare", - "ignition" - ], - "support": { - "issues": "https://github.com/facade/ignition-contracts/issues", - "source": "https://github.com/facade/ignition-contracts/tree/1.0.2" - }, - "time": "2020-10-16T08:27:54+00:00" - }, { "name": "fakerphp/faker", "version": "v1.17.0", @@ -9023,7 +9100,8 @@ "prefer-lowest": false, "platform": { "php": "^7.3|^8.0", - "ext-json": "*" + "ext-json": "*", + "ext-zip": "*" }, "platform-dev": [], "plugin-api-version": "2.3.0" diff --git a/config/breadcrumbs.php b/config/breadcrumbs.php new file mode 100644 index 00000000..08673361 --- /dev/null +++ b/config/breadcrumbs.php @@ -0,0 +1,75 @@ + 'breadcrumbs::bootstrap5', + + /* + |-------------------------------------------------------------------------- + | Breadcrumbs File(s) + |-------------------------------------------------------------------------- + | + | The file(s) where breadcrumbs are defined. e.g. + | + | - base_path('routes/breadcrumbs.php') + | - glob(base_path('breadcrumbs/*.php')) + | + */ + + 'files' => is_admin() ? base_path('beike/Admin/routes/breadcrumbs.php') : base_path('beike/Shop/routes/breadcrumbs.php'), + + /* + |-------------------------------------------------------------------------- + | Exceptions + |-------------------------------------------------------------------------- + | + | Determine when to throw an exception. + | + */ + + // When route-bound breadcrumbs are used but the current route doesn't have a name (UnnamedRouteException) + 'unnamed-route-exception' => true, + + // When route-bound breadcrumbs are used and the matching breadcrumb doesn't exist (InvalidBreadcrumbException) + 'missing-route-bound-breadcrumb-exception' => true, + + // When a named breadcrumb is used but doesn't exist (InvalidBreadcrumbException) + 'invalid-named-breadcrumb-exception' => true, + + /* + |-------------------------------------------------------------------------- + | Classes + |-------------------------------------------------------------------------- + | + | Subclass the default classes for more advanced customisations. + | + */ + + // Manager + 'manager-class' => Diglactic\Breadcrumbs\Manager::class, + + // Generator + 'generator-class' => Diglactic\Breadcrumbs\Generator::class, + +]; diff --git a/themes/default/category.blade.php b/themes/default/category.blade.php index 1283d74c..c4492125 100644 --- a/themes/default/category.blade.php +++ b/themes/default/category.blade.php @@ -3,12 +3,9 @@ @section('content')
- + + {{ Diglactic\Breadcrumbs\Breadcrumbs::render('category', $category) }} +
@foreach ($products as $product)
@include('shared.product')
diff --git a/themes/default/product.blade.php b/themes/default/product.blade.php index dcc03374..14853c22 100644 --- a/themes/default/product.blade.php +++ b/themes/default/product.blade.php @@ -11,12 +11,8 @@ @section('content')
- + + {{ Diglactic\Breadcrumbs\Breadcrumbs::render('product', $product) }}
@@ -256,4 +252,4 @@ $(this).addClass('active').siblings().removeClass('active'); }); -@endpush \ No newline at end of file +@endpush