Enhance categories, add tags, parent

This commit is contained in:
Ludovic CANDELLIER
2021-08-26 17:45:37 +02:00
parent e407934e2a
commit 8d3ccbf148
9 changed files with 60 additions and 44 deletions

View File

@@ -5,6 +5,7 @@ namespace App\Http\Controllers\Admin\Shop;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use App\Repositories\Shop\Categories; use App\Repositories\Shop\Categories;
use App\Repositories\Shop\TagGroups;
use App\Datatables\Shop\CategoriesDataTable; use App\Datatables\Shop\CategoriesDataTable;
class CategoryController extends Controller class CategoryController extends Controller
@@ -24,6 +25,7 @@ class CategoryController extends Controller
$data = []; $data = [];
$data['category_id'] = 0; $data['category_id'] = 0;
$data['categories'] = Categories::getOptions(); $data['categories'] = Categories::getOptions();
$data['tags_list'] = TagGroups::getTreeTags();
return view('Admin.Shop.Categories.create', $data); return view('Admin.Shop.Categories.create', $data);
} }
@@ -41,8 +43,9 @@ class CategoryController extends Controller
public function edit($id) public function edit($id)
{ {
$data = Categories::get($id)->toArray(); $data['category'] = Categories::get($id)->toArray();
$data['categories'] = Categories::getOptions(); $data['categories'] = Categories::getOptions();
$data['tags_list'] = TagGroups::getTreeTags();
return view('Admin.Shop.Categories.edit', $data); return view('Admin.Shop.Categories.edit', $data);
} }

View File

@@ -24,4 +24,15 @@ class Category extends Model
{ {
return $this->morphedByMany('App\Models\Shop\Article', 'categorizable'); 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');
}
} }

View File

@@ -130,13 +130,17 @@ class Articles
public static function storeFull($data) public static function storeFull($data)
{ {
$images = isset($data['images']) ? $data['images'] : false; $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']); unset($data['images']);
$categories = isset($data['categories']) ? $data['categories'] : false;
unset($data['categories']); unset($data['categories']);
$tags = isset($data['tags']) ? $data['tags'] : false;
unset($data['tags']); unset($data['tags']);
$prices = isset($data['prices']) ? $data['prices'] : false;
unset($data['prices']); unset($data['prices']);
$article = self::store($data); $article = self::store($data);
self::storeImages($article, $images); self::storeImages($article, $images);
self::storeCategories($article, $categories); self::storeCategories($article, $categories);

View File

@@ -2,18 +2,10 @@
namespace App\Repositories\Shop; namespace App\Repositories\Shop;
use Yajra\DataTables\DataTables;
use App\Models\Shop\Category; use App\Models\Shop\Category;
class Categories class Categories
{ {
public static function getDatatable()
{
$model = Category::orderBy('name');
return Datatables::of($model)->make(true);
}
public static function getAll() public static function getAll()
{ {
return Category::orderBy('name', 'asc')->get(); return Category::orderBy('name', 'asc')->get();
@@ -21,7 +13,7 @@ class Categories
public static function get($id) public static function get($id)
{ {
return Category::find($id); return Category::with('CategoryTree')->find($id);
} }
public static function getTree() public static function getTree()
@@ -37,12 +29,14 @@ class Categories
public static function storeFull($data) public static function storeFull($data)
{ {
$images = isset($data['images']) ? $data['images'] : false; $images = isset($data['images']) ? $data['images'] : false;
// $tags = isset($data['tags']) ? $data['tags'] : false;
unset($data['images']); unset($data['images']);
// unset($data['tags']);
$tags = isset($data['tags']) ? $data['tags'] : false;
unset($data['tags']);
$category = self::store($data); $category = self::store($data);
self::storeImages($category, $images); self::storeImages($category, $images);
// self::storeTags($category, $tags); self::storeTags($category, $tags);
return $category; return $category;
} }
@@ -126,8 +120,8 @@ class Categories
public static function destroy($id) public static function destroy($id)
{ {
// $category = self::get($id); $category = self::get($id);
// self::deleteNode($category->category_id); self::deleteNode($category->category_id);
return Category::destroy($id); return Category::destroy($id);
} }

View File

@@ -2,8 +2,6 @@
namespace App\Repositories\Shop; namespace App\Repositories\Shop;
use App\Models\Shop\Category;
class CategoryTrees class CategoryTrees
{ {
public static function getTree() public static function getTree()
@@ -50,7 +48,7 @@ class CategoryTrees
public static function create($data) 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 = app('rinvex.categories.category')->create(['name' => $data['name']]);
$category->appendToNode($parent)->save(); $category->appendToNode($parent)->save();
return $category; return $category;

View File

@@ -1,7 +1,7 @@
@extends('layout.index', [ @extends('layout.index', [
'title' => __('shop.categories.title'), 'title' => __('shop.shelves.title'),
'subtitle' => __('shop.categories.add'), 'subtitle' => __('shop.shelves.add'),
'breadcrumb' => [__('shop.categories.title'), __('shop.categories.list')] 'breadcrumb' => [__('shop.shelves.title'), __('shop.shelves.list')]
]) ])
@section('content') @section('content')

View File

@@ -1,13 +1,13 @@
@extends('layout.index', [ @extends('layout.index', [
'title' => __('shop.categories.title'), 'title' => __('shop.shelves.title'),
'subtitle' => __('shop.categories.edit'), 'subtitle' => __('shop.shelves.edit'),
'breadcrumb' => [__('shop.categories.title'), __('shop.categories.list')] 'breadcrumb' => [__('shop.shelves.title'), __('shop.shelves.list')]
]) ])
@section('content') @section('content')
{{ Form::open(['route' => 'Admin.Shop.Categories.store', 'id' => 'form', 'autocomplete' => 'off']) }} {{ Form::open(['route' => 'Admin.Shop.Categories.store', 'id' => 'form', 'autocomplete' => 'off']) }}
<input type="hidden" name="id" value="{{ $id }}"> <input type="hidden" name="id" value="{{ $category['id'] }}">
@include('Admin.Shop.Categories.form') @include('Admin.Shop.Categories.form')
</form> </form>

View File

@@ -1,44 +1,50 @@
<input type="hidden" name="category_id" value="{{ $category_id }}">
<div class="row"> <div class="row">
<div class="col-md-8"> <div class="col-9">
<div class="row"> <div class="row mb-3">
<div class="col-8"> <div class="col-6">
{{ Form::label('name', 'Nom') }} {{ 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])
</div> </div>
<div class="col-4 text-right"> <div class="col-5">
{{ Form::label('parent', 'Rubrique parente') }}
@include('components.select', ['name' => 'parent_id', 'list' => $categories ?? [], 'value' => $category['category_tree']['parent_id'] ?? null, 'required' => true, 'with_empty' => ''])
</div>
<div class="col-1 text-right">
{{ Form::label('visible', 'Visible') }}<br/> {{ Form::label('visible', 'Visible') }}<br/>
@include('components.toggle', ['name' => 'visible', 'value' => isset($visible) ? $visible : null]) @include('components.toggle', ['name' => 'visible', 'value' => $category['visible'] ?? null])
</div> </div>
</div> </div>
<div class="row"> <div class="row mb-3">
<div class="col-12"> <div class="col-12">
{{ Form::label('tags', 'Tags') }} {{ 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])
</div> </div>
</div> </div>
<div class="row"> <div class="row mb-3">
<div class="col-12"> <div class="col-12">
{{ Form::label('description', 'Description') }} {{ 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])
</div> </div>
</div> </div>
</div> </div>
<div class="col-md-4"> <div class="col-3">
<!--
{{ Form::label('photo', 'Photos') }} {{ Form::label('photo', 'Photos') }}
@include('components.uploader.widget', ['load_url' => route('Admin.Shop.Categories.getImages', ['id' => (isset($id)) ? $id : false]), 'delete_url' => route('Admin.Shop.Categories.deleteImage') ]) @include('components.uploader.widget', ['load_url' => route('Admin.Shop.Categories.getImages', ['id' => $category['id'] ?? false]), 'delete_url' => route('Admin.Shop.Categories.deleteImage') ])
-->
</div> </div>
</div> </div>
@include('components.save') @include('components.save')
@include('boilerplate::load.select2') @include('load.form.select2')
@include('load.form.editor')
@push('js') @push('js')
<script> <script>
$(function() { $(function() {
initSelect2(); initSelect2();
initEditor();
}); });
</script> </script>
@endpush @endpush

View File

@@ -1,6 +1,6 @@
@include('boilerplate::load.fileinput') @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') @include('components.uploader.mini-gallery')