n.osennij/laravel-category

该包添加了快速方便地创建分类阶梯菜单、面包屑和带有图像的分类卡片的特性

dev-master 2018-08-31 17:54 UTC

This package is not auto-updated.

Last update: 2024-09-20 07:57:08 UTC


README

Latest Version on Packagist Total Downloads Build Status StyleCI

该包添加了快速方便地创建

  • 分类阶梯菜单
  • "面包屑"
  • 带有图像的分类卡片

依赖

  • Laravel 5.6
  • Bootstrap 4.1

安装

基本

  1. 安装laravel并在.env文件中设置数据库连接

  2. 通过Composer安装包

    $ composer require n.osennij/laravel-category
  3. 使用以下命令执行数据库迁移

    php artisan migrate
    
  4. 可以将包的文件移动到项目目录中。为此,请执行以下命令

    $ php artisan vendor:publish --force
    

    工作必需的条件是导入配置文件 - 选项laravelcategory.config

  5. 添加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;
    }
    
  6. 最后,如果你的模型是针对分类表的,它应该继承包的分类模型

<?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到页面