From 8d3ccbf148f3d140d86b5c85016474f76f7bb0d4 Mon Sep 17 00:00:00 2001 From: Ludovic CANDELLIER Date: Thu, 26 Aug 2021 17:45:37 +0200 Subject: [PATCH] Enhance categories, add tags, parent --- .../Admin/Shop/CategoryController.php | 5 ++- app/Models/Shop/Category.php | 11 ++++++ app/Repositories/Shop/Articles.php | 10 ++++-- app/Repositories/Shop/Categories.php | 22 +++++------- app/Repositories/Shop/CategoryTrees.php | 4 +-- .../Admin/Shop/Categories/create.blade.php | 6 ++-- .../Admin/Shop/Categories/edit.blade.php | 8 ++--- .../Admin/Shop/Categories/form.blade.php | 36 +++++++++++-------- .../components/uploader/widget.blade.php | 2 +- 9 files changed, 60 insertions(+), 44 deletions(-) diff --git a/app/Http/Controllers/Admin/Shop/CategoryController.php b/app/Http/Controllers/Admin/Shop/CategoryController.php index 4ce696d1..9e47c18c 100644 --- a/app/Http/Controllers/Admin/Shop/CategoryController.php +++ b/app/Http/Controllers/Admin/Shop/CategoryController.php @@ -5,6 +5,7 @@ namespace App\Http\Controllers\Admin\Shop; use Illuminate\Http\Request; use App\Repositories\Shop\Categories; +use App\Repositories\Shop\TagGroups; use App\Datatables\Shop\CategoriesDataTable; class CategoryController extends Controller @@ -24,6 +25,7 @@ class CategoryController extends Controller $data = []; $data['category_id'] = 0; $data['categories'] = Categories::getOptions(); + $data['tags_list'] = TagGroups::getTreeTags(); return view('Admin.Shop.Categories.create', $data); } @@ -41,8 +43,9 @@ class CategoryController extends Controller public function edit($id) { - $data = Categories::get($id)->toArray(); + $data['category'] = Categories::get($id)->toArray(); $data['categories'] = Categories::getOptions(); + $data['tags_list'] = TagGroups::getTreeTags(); return view('Admin.Shop.Categories.edit', $data); } diff --git a/app/Models/Shop/Category.php b/app/Models/Shop/Category.php index 4252bdc3..5bb782e3 100644 --- a/app/Models/Shop/Category.php +++ b/app/Models/Shop/Category.php @@ -24,4 +24,15 @@ class Category extends Model { return $this->morphedByMany('App\Models\Shop\Article', 'categorizable'); } + + public function Shelves() + { + return $this->morphedByMany('App\Models\Shop\Category', 'categorizable'); + } + + public function CategoryTree() + { + return $this->belongsTo(app('rinvex.categories.category'),'category_id'); + } + } diff --git a/app/Repositories/Shop/Articles.php b/app/Repositories/Shop/Articles.php index 83a37678..d20452f5 100644 --- a/app/Repositories/Shop/Articles.php +++ b/app/Repositories/Shop/Articles.php @@ -130,13 +130,17 @@ class Articles public static function storeFull($data) { $images = isset($data['images']) ? $data['images'] : false; - $categories = isset($data['categories']) ? $data['categories'] : false; - $tags = isset($data['tags']) ? $data['tags'] : false; - $prices = isset($data['prices']) ? $data['prices'] : false; unset($data['images']); + + $categories = isset($data['categories']) ? $data['categories'] : false; unset($data['categories']); + + $tags = isset($data['tags']) ? $data['tags'] : false; unset($data['tags']); + + $prices = isset($data['prices']) ? $data['prices'] : false; unset($data['prices']); + $article = self::store($data); self::storeImages($article, $images); self::storeCategories($article, $categories); diff --git a/app/Repositories/Shop/Categories.php b/app/Repositories/Shop/Categories.php index 08d5d162..b7be28f0 100644 --- a/app/Repositories/Shop/Categories.php +++ b/app/Repositories/Shop/Categories.php @@ -2,18 +2,10 @@ namespace App\Repositories\Shop; -use Yajra\DataTables\DataTables; - use App\Models\Shop\Category; class Categories { - public static function getDatatable() - { - $model = Category::orderBy('name'); - return Datatables::of($model)->make(true); - } - public static function getAll() { return Category::orderBy('name', 'asc')->get(); @@ -21,7 +13,7 @@ class Categories public static function get($id) { - return Category::find($id); + return Category::with('CategoryTree')->find($id); } public static function getTree() @@ -37,12 +29,14 @@ class Categories public static function storeFull($data) { $images = isset($data['images']) ? $data['images'] : false; - // $tags = isset($data['tags']) ? $data['tags'] : false; unset($data['images']); - // unset($data['tags']); + + $tags = isset($data['tags']) ? $data['tags'] : false; + unset($data['tags']); + $category = self::store($data); self::storeImages($category, $images); - // self::storeTags($category, $tags); + self::storeTags($category, $tags); return $category; } @@ -126,8 +120,8 @@ class Categories public static function destroy($id) { - // $category = self::get($id); - // self::deleteNode($category->category_id); + $category = self::get($id); + self::deleteNode($category->category_id); return Category::destroy($id); } diff --git a/app/Repositories/Shop/CategoryTrees.php b/app/Repositories/Shop/CategoryTrees.php index 88a97517..d31ad4e2 100644 --- a/app/Repositories/Shop/CategoryTrees.php +++ b/app/Repositories/Shop/CategoryTrees.php @@ -2,8 +2,6 @@ namespace App\Repositories\Shop; -use App\Models\Shop\Category; - class CategoryTrees { public static function getTree() @@ -50,7 +48,7 @@ class CategoryTrees public static function create($data) { - $parent = (isset($data['category_id']) && $data['category_id']) ? self::getNode($data['category_id']) : self::getRoot(); + $parent = (isset($data['parent_id']) && $data['parent_id']) ? self::getNode($data['parent_id']) : self::getRoot(); $category = app('rinvex.categories.category')->create(['name' => $data['name']]); $category->appendToNode($parent)->save(); return $category; diff --git a/resources/views/Admin/Shop/Categories/create.blade.php b/resources/views/Admin/Shop/Categories/create.blade.php index add1398d..7251c43b 100644 --- a/resources/views/Admin/Shop/Categories/create.blade.php +++ b/resources/views/Admin/Shop/Categories/create.blade.php @@ -1,7 +1,7 @@ @extends('layout.index', [ - 'title' => __('shop.categories.title'), - 'subtitle' => __('shop.categories.add'), - 'breadcrumb' => [__('shop.categories.title'), __('shop.categories.list')] + 'title' => __('shop.shelves.title'), + 'subtitle' => __('shop.shelves.add'), + 'breadcrumb' => [__('shop.shelves.title'), __('shop.shelves.list')] ]) @section('content') diff --git a/resources/views/Admin/Shop/Categories/edit.blade.php b/resources/views/Admin/Shop/Categories/edit.blade.php index feb7a530..688ae1c2 100644 --- a/resources/views/Admin/Shop/Categories/edit.blade.php +++ b/resources/views/Admin/Shop/Categories/edit.blade.php @@ -1,13 +1,13 @@ @extends('layout.index', [ - 'title' => __('shop.categories.title'), - 'subtitle' => __('shop.categories.edit'), - 'breadcrumb' => [__('shop.categories.title'), __('shop.categories.list')] + 'title' => __('shop.shelves.title'), + 'subtitle' => __('shop.shelves.edit'), + 'breadcrumb' => [__('shop.shelves.title'), __('shop.shelves.list')] ]) @section('content') {{ Form::open(['route' => 'Admin.Shop.Categories.store', 'id' => 'form', 'autocomplete' => 'off']) }} - + @include('Admin.Shop.Categories.form') diff --git a/resources/views/Admin/Shop/Categories/form.blade.php b/resources/views/Admin/Shop/Categories/form.blade.php index 9fbc4919..2a85ed74 100644 --- a/resources/views/Admin/Shop/Categories/form.blade.php +++ b/resources/views/Admin/Shop/Categories/form.blade.php @@ -1,44 +1,50 @@ - -
-
-
-
+
+
+
{{ Form::label('name', 'Nom') }} - @include('components.input', ['name' => 'name', 'value' => isset($name) ? $name : null, 'required' => true]) + @include('components.input', ['name' => 'name', 'value' => $category['name'] ?? null, 'required' => true])
-
+
+ {{ Form::label('parent', 'Rubrique parente') }} + @include('components.select', ['name' => 'parent_id', 'list' => $categories ?? [], 'value' => $category['category_tree']['parent_id'] ?? null, 'required' => true, 'with_empty' => '']) +
+
{{ Form::label('visible', 'Visible') }}
- @include('components.toggle', ['name' => 'visible', 'value' => isset($visible) ? $visible : null]) + @include('components.toggle', ['name' => 'visible', 'value' => $category['visible'] ?? null])
-
+
{{ Form::label('tags', 'Tags') }} - @include('components.select', ['name' => 'tags', 'value' => isset($tags) ? $tags : null, 'class' => 'select2 form-control', 'multiple' => true]) + @include('components.select-tree', ['name' => 'tags[]', 'list' => $tags_list, 'values' => $category['tags'] ?? null, 'class' => 'select2', 'multiple' => true])
-
+
{{ Form::label('description', 'Description') }} - @include('components.textarea', ['name' => 'description', 'value' => isset($description) ? $description : null, 'class' => 'editor', 'required' => true]) + @include('components.textarea', ['name' => 'description', 'value' => $category['description'] ?? null, 'class' => 'editor', 'required' => true])
-
+
+
@include('components.save') -@include('boilerplate::load.select2') +@include('load.form.select2') +@include('load.form.editor') @push('js') @endpush \ No newline at end of file diff --git a/resources/views/components/uploader/widget.blade.php b/resources/views/components/uploader/widget.blade.php index 3be8c1e1..9a834e82 100644 --- a/resources/views/components/uploader/widget.blade.php +++ b/resources/views/components/uploader/widget.blade.php @@ -1,6 +1,6 @@ @include('boilerplate::load.fileinput') -@component('components.layout.box-collapse', ['id' => ($prefix ?? '') . $name ?? 'images', 'title' => $title ?? 'Photos', 'collapsed' => $collapsed ?? false]) +@component('components.layout.box-collapse', ['id' => ($prefix ?? '') . ($name ?? 'images'), 'title' => $title ?? 'Photos', 'collapsed' => $collapsed ?? false]) @include('components.uploader.mini-gallery')