diff --git a/app/Enums/Page.php b/app/Enums/Page.php index ae7fe33..e8848d4 100644 --- a/app/Enums/Page.php +++ b/app/Enums/Page.php @@ -23,6 +23,11 @@ use Kwaadpepper\Enum\BaseEnumRoutable; * @method static self foodProducts() * @method static self mentions() * @method static self charte() + * @method static self home() + * @method static self marque() + * @method static self news() + * @method static self foodservice() + * @method static self gammes() */ class Page extends BaseEnumRoutable { @@ -49,6 +54,11 @@ class Page extends BaseEnumRoutable 'foodProducts' => 17, 'mentions' => 18, 'charte' => 19, + 'home' => 20, + 'marque' => 21, + 'news' => 22, + 'foodservice' => 23, + 'gammes' => 24 ]; } } diff --git a/app/Http/Controllers/Bo/SeoDataController.php b/app/Http/Controllers/Bo/SeoDataController.php new file mode 100644 index 0000000..b0b9b38 --- /dev/null +++ b/app/Http/Controllers/Bo/SeoDataController.php @@ -0,0 +1,91 @@ +fill($request->validated()); + $SeoDatum->save(); + + return redirect()->route('bo.seo_data.edit', $SeoDatum->page) + ->with('success', trans('Modifications enregistrées !')); + } + + /** + * Remove the specified resource from storage. + * + * @param \App\Models\SeoDatum $SeoDatum + * @return \Illuminate\Http\Response + */ + public function destroy(SeoDatum $SeoDatum) + { + // + } +} diff --git a/app/Http/Controllers/FoodServiceController.php b/app/Http/Controllers/FoodServiceController.php new file mode 100644 index 0000000..63a4563 --- /dev/null +++ b/app/Http/Controllers/FoodServiceController.php @@ -0,0 +1,18 @@ +first(); + + return view('front.food-service', compact('seoDatum')); + } +} diff --git a/app/Http/Controllers/GammesController.php b/app/Http/Controllers/GammesController.php index 44970d0..ae6b750 100644 --- a/app/Http/Controllers/GammesController.php +++ b/app/Http/Controllers/GammesController.php @@ -2,8 +2,10 @@ namespace App\Http\Controllers; +use App\Enums\Page; use App\Models\Gamme; use App\Models\Product; +use App\Models\SeoDatum; class GammesController extends Controller { @@ -15,7 +17,10 @@ class GammesController extends Controller $gammes = $gammes->whereNotIn('slug','food-service'); $nb_gammes = $gammes->count(); - return view('front.gammes.index', compact('gammes', 'nb_gammes')); + $page = Page::gammes(); + $seoDatum = SeoDatum::where('page',$page)->first(); + + return view('front.gammes.index', compact('gammes', 'nb_gammes', 'seoDatum')); } public function show(Gamme $gamme) @@ -38,6 +43,11 @@ class GammesController extends Controller ->orderBy('name') ->get(); - return view('front.gammes.show', compact('gamme', 'products')); + //make ghost seoDatum from the gamme + $seoDatum = new SeoDatum(); + $seoDatum->title = $gamme->title; + $seoDatum->description = $gamme->text; + + return view('front.gammes.show', compact('gamme', 'products', 'seoDatum')); } } diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index 7dfec10..79801f2 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -2,6 +2,8 @@ namespace App\Http\Controllers; +use App\Enums\Page; +use App\Models\SeoDatum; use App\Models\Slide; use App\Models\Slider; use Illuminate\Support\Carbon; @@ -10,6 +12,10 @@ class HomeController extends Controller { public function index() { + + $page = Page::home(); + $seoDatum = SeoDatum::where('page',$page)->first(); + $slider = Slider::where('published', 1)->first(); if ($slider) { $slides = Slide::whereHas('slider', function ($q) use ($slider) { @@ -26,9 +32,9 @@ class HomeController extends Controller }); })->orderBy('order', 'ASC') ->get(); - return view('front.home', compact('slider', 'slides')); + return view('front.home', compact('slider', 'slides', 'seoDatum')); } else { - return view('front.home', compact('slider')); + return view('front.home', compact('slider', 'seoDatum')); } } } diff --git a/app/Http/Controllers/LegalsController.php b/app/Http/Controllers/LegalsController.php new file mode 100644 index 0000000..79ed21a --- /dev/null +++ b/app/Http/Controllers/LegalsController.php @@ -0,0 +1,22 @@ +value)->first(); + + //make ghost seoDatum from the gamme + $seoDatum = new SeoDatum(); + $seoDatum->title = $mentions_legales->title; + + return view('front.legals', compact('seoDatum')); + } +} diff --git a/app/Http/Controllers/MarqueController.php b/app/Http/Controllers/MarqueController.php new file mode 100644 index 0000000..79e41c1 --- /dev/null +++ b/app/Http/Controllers/MarqueController.php @@ -0,0 +1,18 @@ +first(); + + return view('front.a-propos', compact('seoDatum')); + } +} diff --git a/app/Http/Controllers/NewsController.php b/app/Http/Controllers/NewsController.php new file mode 100644 index 0000000..332cd9d --- /dev/null +++ b/app/Http/Controllers/NewsController.php @@ -0,0 +1,18 @@ +first(); + + return view('front.news', compact('seoDatum')); + } +} diff --git a/app/Http/Controllers/PolicyController.php b/app/Http/Controllers/PolicyController.php new file mode 100644 index 0000000..cd83b21 --- /dev/null +++ b/app/Http/Controllers/PolicyController.php @@ -0,0 +1,22 @@ +value)->first(); + + //make ghost seoDatum from the gamme + $seoDatum = new SeoDatum(); + $seoDatum->title = $privacy_policy->title; + + return view('front.policy', compact('seoDatum')); + } +} diff --git a/app/Http/Controllers/ProductsController.php b/app/Http/Controllers/ProductsController.php index 161b764..6f04d09 100644 --- a/app/Http/Controllers/ProductsController.php +++ b/app/Http/Controllers/ProductsController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers; use App\Models\Gamme; use App\Models\Product; +use App\Models\SeoDatum; use Illuminate\Http\Request; class ProductsController extends Controller @@ -13,7 +14,13 @@ class ProductsController extends Controller { //$product = Product::whereSlug($product->slug)->first(); //dd($product); - return view('front.product', compact('product', 'gamme')); + + //make ghost seoDatum from the gamme + $seoDatum = new SeoDatum(); + $seoDatum->title = $product->name; + $seoDatum->description = $product->description; + + return view('front.product', compact('product', 'gamme', 'seoDatum')); } public function search(Request $request) { diff --git a/app/Http/Middleware/InitVarsGlobals.php b/app/Http/Middleware/InitVarsGlobals.php index 1124288..b9040c3 100644 --- a/app/Http/Middleware/InitVarsGlobals.php +++ b/app/Http/Middleware/InitVarsGlobals.php @@ -57,8 +57,10 @@ class InitVarsGlobals ])->first(); // Limitation à 3 produits affichés sur la homepage $products_home = Product::where('is_on_top', true)->take(3)->get(); - // Limitation à 6 produits affichés sur la page Food Service - $products_food = Product::where('is_food_service', true)->take(6)->get(); + // produits affichés sur la page news + $products_news = Product::where('is_news', true)->get(); + // Produits affichés sur la page Food Service + $products_food = Product::where('is_food_service', true)->get(); $pictos_marqueBloc2 = Picto::where('page', Page::marqueBloc2()->value)->get(); $pictos_food = Picto::where('page', Page::foodBloc2()->value)->get(); @@ -87,6 +89,7 @@ class InitVarsGlobals View::share('posts', $posts); View::share('products_home', $products_home); + View::share('products_news', $products_news); View::share('products_food', $products_food); View::share('advice_news', $advice_news); diff --git a/app/Http/Requests/StoreProductRequest.php b/app/Http/Requests/StoreProductRequest.php index e4f440e..76e5bb7 100644 --- a/app/Http/Requests/StoreProductRequest.php +++ b/app/Http/Requests/StoreProductRequest.php @@ -150,6 +150,7 @@ class StoreProductRequest extends FormRequest 'plusproduit' => $tabPlusProduit, 'is_published' => $this->is_published ? true : false, 'is_on_top' => $this->is_on_top ? true : false, + 'is_news' => $this->is_news ? true : false, 'is_food_service' => $this->is_food_service ? true : false, 'is_halal' => $this->is_halal ? true : false, ]); @@ -180,6 +181,7 @@ class StoreProductRequest extends FormRequest 'pictogramme2' => 'nullable|image|mimes:png|max:1024|dimensions:width=141,height=100', 'is_published' => 'nullable|boolean', 'is_on_top' => 'nullable|boolean', + 'is_news' => 'nullable|boolean', 'is_food_service' => 'nullable|boolean', 'is_halal' => 'nullable|boolean', // 'seo_title' => 'required|max:255', diff --git a/app/Http/Requests/StoreSeoDataRequest.php b/app/Http/Requests/StoreSeoDataRequest.php new file mode 100644 index 0000000..5f3601b --- /dev/null +++ b/app/Http/Requests/StoreSeoDataRequest.php @@ -0,0 +1,32 @@ +check(); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + 'title' => 'required|max:255', + 'description' => 'sometimes|max:255', + 'keywords' => 'sometimes|max:255', + ]; + } +} diff --git a/app/Models/Product.php b/app/Models/Product.php index b4cd42f..995915b 100644 --- a/app/Models/Product.php +++ b/app/Models/Product.php @@ -24,6 +24,7 @@ class Product extends Model 'plusproduit', 'is_published', 'is_on_top', + 'is_news', 'is_halal', 'is_food_service', 'seo_title', diff --git a/app/Models/SeoDatum.php b/app/Models/SeoDatum.php new file mode 100644 index 0000000..b6c48be --- /dev/null +++ b/app/Models/SeoDatum.php @@ -0,0 +1,50 @@ + Page::class + ]; + + /** + * Engagment fillable fields + * + * @var array + */ + protected $fillable = [ + 'title', + 'description', + 'keywords' + ]; + + /** + * Engagment translatable fields array + * + * @var array + */ + public $translatable = [ + 'title', + 'description', + 'keywords' + ]; + + /** + * Get the route key for the model. + * + * @return string + */ + public function getRouteKeyName() + { + return 'page'; + } +} diff --git a/composer.json b/composer.json index 55afe19..df852f2 100644 --- a/composer.json +++ b/composer.json @@ -64,7 +64,10 @@ "config": { "optimize-autoloader": true, "preferred-install": "dist", - "sort-packages": true + "sort-packages": true, + "allow-plugins": { + "dealerdirect/phpcodesniffer-composer-installer": true + } }, "minimum-stability": "dev", "prefer-stable": true diff --git a/database/factories/ProductFactory.php b/database/factories/ProductFactory.php index 8e37616..ae4fecf 100644 --- a/database/factories/ProductFactory.php +++ b/database/factories/ProductFactory.php @@ -130,6 +130,7 @@ class ProductFactory extends Factory 'plusproduit' => json_encode([$tabPlusProduit1, $tabPlusProduit2, $tabPlusProduit3]), 'is_published' => true, 'is_on_top' => rand(true, false), + 'is_news' => rand(true, false), 'is_food_service' => rand(true, false), 'is_halal' => rand(true, false), 'seo_title' => $this->faker->text(5), diff --git a/database/migrations/2022_05_12_101807_add_is_news_on_products.php b/database/migrations/2022_05_12_101807_add_is_news_on_products.php new file mode 100644 index 0000000..79a8bbe --- /dev/null +++ b/database/migrations/2022_05_12_101807_add_is_news_on_products.php @@ -0,0 +1,32 @@ +boolean('is_news')->after('is_on_top'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('products', function (Blueprint $table) { + $table->dropColumn('is_news'); + }); + } +} diff --git a/database/migrations/2022_05_12_110531_create_seo_data_table.php b/database/migrations/2022_05_12_110531_create_seo_data_table.php new file mode 100644 index 0000000..2353c1e --- /dev/null +++ b/database/migrations/2022_05_12_110531_create_seo_data_table.php @@ -0,0 +1,39 @@ +id(); + $table->smallInteger('page')->unique(); + $table->text('title')->nullable(); + $table->text('description')->nullable(); + $table->text('keywords')->nullable(); + $table->timestamps(); + }); + + $seeder = new SeoDataSeeder(); + $seeder->run(); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('seo_data'); + } +} diff --git a/database/seeders/GammesSeeder.php b/database/seeders/GammesSeeder.php index 3fa08c0..6d16be5 100644 --- a/database/seeders/GammesSeeder.php +++ b/database/seeders/GammesSeeder.php @@ -162,6 +162,7 @@ class GammesSeeder extends Seeder $product->plusproduit = json_encode([$tabPlusProduit1, $tabPlusProduit2]); $product->is_published = true; $product->is_on_top = rand(true, false); + $product->is_news = rand(true, false); $product->is_food_service = rand(true, false); $product->is_halal = rand(true, false); $product->seo_title = 'Chicken franks, poulet, recettes, qualité'; @@ -226,6 +227,7 @@ class GammesSeeder extends Seeder $product->plusproduit = json_encode([$tabPlusProduit1, $tabPlusProduit2]); $product->is_published = true; $product->is_on_top = rand(true, false); + $product->is_news = rand(true, false); $product->is_food_service = rand(true, false); $product->is_halal = rand(true, false); $product->seo_title = 'recette, qualité, Chicken franks, plaisir, gourmandise'; @@ -254,6 +256,7 @@ class GammesSeeder extends Seeder $product->plusproduit = json_encode([$tabPlusProduit1, $tabPlusProduit2, $tabPlusProduit3]); $product->is_published = true; $product->is_on_top = rand(true, false); + $product->is_news = rand(true, false); $product->is_food_service = rand(true, false); $product->is_halal = rand(true, false); $product->seo_title = 'recette, qualité, Chicken franks, plaisir, gourmandise'; @@ -312,6 +315,7 @@ class GammesSeeder extends Seeder $product->plusproduit = json_encode([$tabPlusProduit1, $tabPlusProduit2, $tabPlusProduit3]); $product->is_published = true; $product->is_on_top = rand(true, false); + $product->is_news = rand(true, false); $product->is_food_service = rand(true, false); $product->is_halal = rand(true, false); $product->seo_title = 'recette, qualité, viande, cuisse, steak haché, poulet'; @@ -351,6 +355,7 @@ class GammesSeeder extends Seeder $product->plusproduit = json_encode([$tabPlusProduit1]); $product->is_published = true; $product->is_on_top = rand(true, false); + $product->is_news = rand(true, false); $product->is_food_service = rand(true, false); $product->is_halal = rand(true, false); $product->seo_title = 'volaille, poulet, Doux, qualités'; diff --git a/database/seeders/SeoDataSeeder.php b/database/seeders/SeoDataSeeder.php new file mode 100644 index 0000000..9598e09 --- /dev/null +++ b/database/seeders/SeoDataSeeder.php @@ -0,0 +1,53 @@ +title = "Page d'accueil"; + $seo_data->description = ""; + $seo_data->keywords = ""; + $seo_data->page = Page::home(); + $seo_data->save(); + + $seo_data = new SeoDatum(); + $seo_data->title = "Marque"; + $seo_data->description = ""; + $seo_data->keywords = ""; + $seo_data->page = Page::marque(); + $seo_data->save(); + + $seo_data = new SeoDatum(); + $seo_data->title = "Actualités"; + $seo_data->description = ""; + $seo_data->keywords = ""; + $seo_data->page = Page::news(); + $seo_data->save(); + + $seo_data = new SeoDatum(); + $seo_data->title = "Food Service"; + $seo_data->description = ""; + $seo_data->keywords = ""; + $seo_data->page = Page::foodservice(); + $seo_data->save(); + + $seo_data = new SeoDatum(); + $seo_data->title = "Les Gammes"; + $seo_data->description = ""; + $seo_data->keywords = ""; + $seo_data->page = Page::gammes(); + $seo_data->save(); + } +} diff --git a/resources/views/back/products/form-inputs.blade.php b/resources/views/back/products/form-inputs.blade.php index 73646da..50fca22 100644 --- a/resources/views/back/products/form-inputs.blade.php +++ b/resources/views/back/products/form-inputs.blade.php @@ -132,6 +132,11 @@ $plusproduit = json_decode($product->plusproduit); @include('back.modules.input-error', ['inputName'=>'is_on_top']) +
Lorem ip sum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostr
-
-
- 2021
- Lorem ip sum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostr
-
- 2020
- Lorem ip sum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostr
-{{ __('Nous travaillons toujours pour améliorer nos recettes et proposer des produits de meilleure qualité')}}
- @if (isset($products_home)) + @if (isset($products_news))