From 1de8df88cc2d37deaa8eda42fb2c50d0a9737cf1 Mon Sep 17 00:00:00 2001 From: Vincent Vanwaelscappel Date: Wed, 10 Jul 2019 21:25:37 +0200 Subject: [PATCH] #2878 --- app/Http/Controllers/ProductController.php | 21 +++++++++++- app/Models/Producttype.php | 4 +++ app/Templates/Catalog.php | 37 +++++++++++++++++++++- routes/web.php | 32 +++---------------- 4 files changed, 64 insertions(+), 30 deletions(-) diff --git a/app/Http/Controllers/ProductController.php b/app/Http/Controllers/ProductController.php index 70045d0..1efe0b0 100644 --- a/app/Http/Controllers/ProductController.php +++ b/app/Http/Controllers/ProductController.php @@ -4,10 +4,29 @@ namespace App\Http\Controllers; use App\Models\Product; +use App\Models\ProductType; use Cubist\Backpack\app\Http\Controllers\CubistFrontController; class ProductController extends CubistFrontController { + public function productList($id) + { + $productType = ProductType::find($id); + if (!$productType) { + $this->_404(); + } + + $this->data['title'] = $productType->name; + $this->data['product_type'] = $productType->getPageData(); + $this->data['products'] = []; + $products = Product::where('product_type', $id)->get(); + foreach ($products as $item) { + $this->data['products'][$item->id] = $item->getPageData(); + } + + return view('pages.products', $this->data); + } + public function productDetails($id) { $product = Product::find($id); @@ -17,7 +36,7 @@ class ProductController extends CubistFrontController } $this->data['title'] = $product->title; - $this->data['product'] = $product->withFakes(); + $this->data['product'] = $product->getPageData(); return view('pages.product-detail', $this->data); } diff --git a/app/Models/Producttype.php b/app/Models/Producttype.php index f7b2793..d0f68d9 100644 --- a/app/Models/Producttype.php +++ b/app/Models/Producttype.php @@ -21,6 +21,10 @@ class ProductType extends CubistMagicModel 'type' => 'Text', 'column' => true]); + $this->addField(['name' => 'slug', + 'label' => 'Slug', + 'type' => 'Slug']); + $this->addField([ 'name' => 'type', 'label' => 'Famille de produits', diff --git a/app/Templates/Catalog.php b/app/Templates/Catalog.php index 61aa406..02bc6bf 100644 --- a/app/Templates/Catalog.php +++ b/app/Templates/Catalog.php @@ -3,11 +3,46 @@ namespace App\Templates; +use App\Models\ProductType; +use Cubist\Backpack\app\Magic\Menu\Item; +use Cubist\Backpack\app\Magic\Menu\VirtualItem; +use Cubist\Backpack\app\Template\TemplateAbstract; -class Catalog extends Base +class Catalog extends TemplateAbstract { + protected $_virtual = true; + public function getName() { return 'Catalogue de produits'; } + + public function setMenuChildren($menu) + { + parent::setMenuChildren($menu); + + $families = ['captor' => __('Capteurs'), 'system' => __('Systèmes de mesure')]; + + $productTypes = ProductType::all(); + $menu->setType('mega'); + + foreach ($families as $key => $family) { + $item = new VirtualItem(); + $item->setId('products_' . $key); + $item->setTitle($family); + $menu->addChild($item); + foreach ($productTypes as $productType) { + if ($productType->type !== $key) { + continue; + } + $category = new Item(); + $category->setTitle($productType->name); + $category->setHref($productType->slug); + $category->setId('product_type_' . $productType->id); + $category->setController(['controller' => 'ProductController', 'action' => 'productList', 'params' => ['id' => $productType->id]]); + $item->addChild($category); + } + } + } + } diff --git a/routes/web.php b/routes/web.php index 25e01e8..b8d6836 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,32 +1,8 @@ 'ProductController@productDetails']); +Route::get('cubist/producttype/{id}', ['uses' => 'ProductController@productList']); +Route::get('cubist/page/{slug}', ['uses' => 'PageController@index']); -Route::get('/products/{category}/{id}', function ($category, $id = null) { - return view('pages.product-detail', compact('category', 'id')); -})->where(['category' => '.*']); - -Route::get('/products/{category}', function ($category) { - return view('pages.products', compact('category')); -})->where(['name' => '.*']); - -// Temporary catch all for testing nav and breadcrumbs -//Route::get('/{name}', function ($name) { -// return view('pages.test', compact('name')); -//})->where(['name' => '.*']); - -Route::get('product/{id}', ['uses' => 'ProductController@productDetails']); - -/** CATCH-ALL ROUTE for CMS Pages - needs to be at the end of your web.php file **/ -Route::get('{page}/{subs?}', ['uses' => 'PageController@index']) +Route::get('{page}/{subs?}', ['uses' => 'PageController@catchall']) ->where(['page' => '^(((?=(?!admin))(?=(?!\/)).))*$', 'subs' => '.*']); - -- 2.39.5