n.osennij / laravel-category
该包添加了快速方便地创建分类阶梯菜单、面包屑和带有图像的分类卡片的特性
Requires
Requires (Dev)
- orchestra/testbench: ~3.0
- phpunit/phpunit: ~6.0
This package is not auto-updated.
Last update: 2024-09-20 07:57:08 UTC
README
该包添加了快速方便地创建
- 分类阶梯菜单
- "面包屑"
- 带有图像的分类卡片
依赖
- Laravel 5.6
- Bootstrap 4.1
安装
基本
-
安装laravel并在.env文件中设置数据库连接
-
通过Composer安装包
$ composer require n.osennij/laravel-category
-
使用以下命令执行数据库迁移
php artisan migrate
-
可以将包的文件移动到项目目录中。为此,请执行以下命令
$ php artisan vendor:publish --force
工作必需的条件是导入配置文件 - 选项
laravelcategory.config
! -
添加CSS样式(对于正确显示分类卡片是必需的)
.laravelcategorycard .text { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); padding: 10px; opacity: 1; } .laravelcategorycard a > .card-img { opacity: 0.2; transition: all 0.25s ease-in; } .laravelcategorycard a:hover > .card-img { opacity: 0.5; -webkit-box-shadow: 0 0.8rem 3rem rgba(0, 0, 0, 0.075) !important; box-shadow: 0 0.8rem 3rem rgba(0, 0, 0, 0.075) !important; }
-
最后,如果你的模型是针对分类表的,它应该继承包的分类模型
<?php
namespace App;
use nosennij\LaravelCategory\models\Category as LaravelCategory;
class Category extends LaravelCategory
{
// Тут ваши личные методы
}
附加
在数据库迁移过程中,创建了一个结构如下的categories
表
CREATE TABLE `categories` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`parent_id` int(10) unsigned NOT NULL DEFAULT '0',
`name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
`slug` varchar(115) COLLATE utf8mb4_unicode_ci NOT NULL,
`img` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `categories_name_unique` (`name`),
UNIQUE KEY `categories_slug_unique` (`slug`),
KEY `categories_id_parent_id_index` (`id`,`parent_id`),
KEY `categories_parent_id_id_index` (`parent_id`,`id`),
KEY `categories_parent_id_index` (`parent_id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
为了处理图像,应在存储上创建一个符号链接
php artisan storage:link
可以使用以下命令填充测试数据到表中(如果已导入数据集和工厂),在database/seeds/CategoriesTableSeeder.php
文件中注册数据集 - $this->call(CategoriesTableSeeder::class);
并执行composer dumpautoload
composer dumpautoload
php artisan db:seed
##使用
首先创建路由
Route::get('/category/{slug?}', 'CategoryController@index')->name('category');
- slug - 分类名称,用
-
代替空格(见数据库) - category - 路由名称
如果需要,可以在设置中更改它们的名称。这需要正确生成菜单中分类链接的链接,使用route()
函数。
接下来在控制器中连接包并创建类的实例。之后有两种选择
- 传递
string $slug
-$lc->initWithSlug($slug)
- 传递
Category $category
-$lc->initWithCategory($category)
<?php
namespace App\Http\Controllers;
use nosennij\LaravelCategory\LaravelCategory; //подключаем пакет
use Illuminate\Http\Request;
class CategoryController extends Controller
{
public function index(Request $request)
{
$lc = new LaravelCategory(); //Созадём экземляр класса
$lc->initWithSlug($request->$slug);
//удобнее и лучше этот вариант,
//т.к. обычно в самом методе мы уже получаем категорию из роута
//$lc->initWithCategory($category);
return view('catalog', [
'categories_numu' => $lc->createCategoryMenu(),
'breadcrumb' => $lc->createCategoryBreadcrumbs(),
'categories_сards' => $lc->createCategoryCards(),
]);
}
}
string $append
- 为了添加不与分类相关的最后一个面包屑。例如,在商品页面上显示面包屑时,方便地将所有链接设置为活动状态,而最后一个(商品名称)不设置。因为类只与分类相关,所以需要单独传递商品名称作为最后一个面包屑。
数据默认缓存时间为5分钟。对于createCategoryBreadcrumbs()
方法,缓存每个URL的HTML,以避免在页面刷新和来回切换时重复操作。对于getCategoryTree()
方法,缓存所有分类的数组。
可以修改缓存存储时间(以分钟为单位)如下
$lc = new LaravelCategory();
$lc->cache_time = 1; //Храним одну минуту
$lc->cache_time = 0; //Отключаем кеш
//Если кешировали, а потом отключили, то старый кеш останется. Его нужно очистить или подождать.
在模板中,使用{!! $your_data !!}
输出HTML到页面