Merge branch 'develop' into trunk

This commit is contained in:
Olivier Legat 2022-05-12 16:06:08 +02:00
commit df4f4e63ed
36 changed files with 613 additions and 79 deletions

View file

@ -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
];
}
}

View file

@ -0,0 +1,91 @@
<?php
namespace App\Http\Controllers\Bo;
use App\Http\Controllers\Controller;
use App\Http\Requests\StoreSeoDataRequest;
use App\Models\SeoDatum;
use Illuminate\Http\Request;
class SeoDataController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param \App\Models\SeoDatum $SeoDatum
* @return \Illuminate\Http\Response
*/
public function show(SeoDatum $SeoDatum)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\SeoDatum $SeoDatum
* @return \Illuminate\Http\Response
*/
public function edit(SeoDatum $SeoDatum)
{
return view('back.seo_data.edit', compact('SeoDatum'));
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\SeoDatum $SeoDatum
* @return \Illuminate\Http\Response
*/
public function update(StoreSeoDataRequest $request, SeoDatum $SeoDatum)
{
$SeoDatum->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)
{
//
}
}

View file

@ -0,0 +1,18 @@
<?php
namespace App\Http\Controllers;
use App\Enums\Page;
use App\Models\SeoDatum;
use Illuminate\Http\Request;
class FoodServiceController extends Controller
{
public function index()
{
$page = Page::foodservice();
$seoDatum = SeoDatum::where('page',$page)->first();
return view('front.food-service', compact('seoDatum'));
}
}

View file

@ -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'));
}
}

View file

@ -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'));
}
}
}

View file

@ -0,0 +1,22 @@
<?php
namespace App\Http\Controllers;
use App\Enums\Page;
use App\Models\SeoDatum;
use App\Models\Text;
use Illuminate\Http\Request;
class LegalsController extends Controller
{
public function index()
{
$mentions_legales = Text::where('page', Page::mentions()->value)->first();
//make ghost seoDatum from the gamme
$seoDatum = new SeoDatum();
$seoDatum->title = $mentions_legales->title;
return view('front.legals', compact('seoDatum'));
}
}

View file

@ -0,0 +1,18 @@
<?php
namespace App\Http\Controllers;
use App\Enums\Page;
use App\Models\SeoDatum;
use Illuminate\Http\Request;
class MarqueController extends Controller
{
public function index()
{
$page = Page::marque();
$seoDatum = SeoDatum::where('page',$page)->first();
return view('front.a-propos', compact('seoDatum'));
}
}

View file

@ -0,0 +1,18 @@
<?php
namespace App\Http\Controllers;
use App\Enums\Page;
use App\Models\SeoDatum;
use Illuminate\Http\Request;
class NewsController extends Controller
{
public function index()
{
$page = Page::news();
$seoDatum = SeoDatum::where('page',$page)->first();
return view('front.news', compact('seoDatum'));
}
}

View file

@ -0,0 +1,22 @@
<?php
namespace App\Http\Controllers;
use App\Enums\Page;
use App\Models\SeoDatum;
use App\Models\Text;
use Illuminate\Http\Request;
class PolicyController extends Controller
{
public function index()
{
$privacy_policy = Text::where('page', Page::charte()->value)->first();
//make ghost seoDatum from the gamme
$seoDatum = new SeoDatum();
$seoDatum->title = $privacy_policy->title;
return view('front.policy', compact('seoDatum'));
}
}

View file

@ -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) {

View file

@ -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);

View file

@ -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',

View file

@ -0,0 +1,32 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreSeoDataRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return auth()->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',
];
}
}

View file

@ -24,6 +24,7 @@ class Product extends Model
'plusproduit',
'is_published',
'is_on_top',
'is_news',
'is_halal',
'is_food_service',
'seo_title',

50
app/Models/SeoDatum.php Normal file
View file

@ -0,0 +1,50 @@
<?php
namespace App\Models;
use App\Enums\Page;
use App\Traits\CastsEnumsHasTranslations;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class SeoDatum extends Model
{
use HasFactory;
use CastsEnumsHasTranslations;
public $enumCasts = [
'page' => 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';
}
}

View file

@ -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

View file

@ -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),

View file

@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddIsNewsOnProducts extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('products', function (Blueprint $table) {
$table->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');
});
}
}

View file

@ -0,0 +1,39 @@
<?php
use Database\Seeders\SeoDataSeeder;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateSeoDataTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('seo_data', function (Blueprint $table) {
$table->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');
}
}

View file

@ -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';

View file

@ -0,0 +1,53 @@
<?php
namespace Database\Seeders;
use App\Enums\Page;
use App\Models\SeoDatum;
use Illuminate\Database\Seeder;
class SeoDataSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$seo_data = new SeoDatum();
$seo_data->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();
}
}

View file

@ -132,6 +132,11 @@ $plusproduit = json_decode($product->plusproduit);
<label class="form-check-label" for="is_on_top">{{ __('A la une') }}</label>
@include('back.modules.input-error', ['inputName'=>'is_on_top'])
</div>
<div class="form-group form-switch">
<input class="form-check-input" type="checkbox" id="is_news" name="is_news" @if (old('is_news', $product->is_news) === 1 || old('is_news', $product->is_news) === 'on')checked="checked" @endif>
<label class="form-check-label" for="is_news">{{ __('Affiché dans la page "Actualités') }}</label>
@include('back.modules.input-error', ['inputName'=>'is_news'])
</div>
<div class="form-group form-switch">
<input class="form-check-input" type="checkbox" id="is_food_service" name="is_food_service" @if (old('is_food_service', $product->is_food_service) === 1 || old('is_food_service', $product->is_food_service) === 'on')checked="checked" @endif>
<label class="form-check-label" for="is_food_service">{{ __('Affiché dans la page "Food Service"') }}</label>

View file

@ -19,6 +19,7 @@
<th scope="col">{{ __('Gamme') }}</th>
<th scope="col">{{ __('Publié') }}</th>
<th scope="col">{{ __('A la une') }}</th>
<th scope="col">{{ __('Actualités') }}</th>
<th scope="col">{{ __('Food Service') }}</th>
<th scope="col">{{ __('Halal') }}</th>
<th scope="col"></th>
@ -42,6 +43,7 @@
@endif
<td>{{$product->is_published ? 'Oui' : 'Non'}}</td>
<td>{{$product->is_on_top ? 'Oui' : 'Non'}}</td>
<td>{{$product->is_news ? 'Oui' : 'Non'}}</td>
<td>{{$product->is_food_service ? 'Oui' : 'Non'}}</td>
<td>{{$product->is_halal ? 'Oui' : 'Non'}}</td>
<td>

View file

@ -0,0 +1,79 @@
@extends('layouts.backend')
@section('content')
<form action="{{route('bo.seo_data.update', $SeoDatum->page)}}" method="POST" enctype="multipart/form-data">
@method('PUT')
@csrf
<div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 border-bottom">
<h1 class="h2"><a href="{{route('bo.home')}}" class="h2 text-decoration-none">
< </a> {{ __('Paramètres SEO')."-".$SeoDatum->page->label}} <small class="text-muted">{{ __('Edition') }}</small></h1>
<div class="btn-toolbar mb-2 mb-md-0">
<button type="submit" class="btn btn-sm btn-primary">{{ __('Enregistrer') }}</a>
</div>
</div>
<div class="form-group">
<label for="title">{{ __('Titre') }} *</label>
<input type="text" id="title" name="title" class="form-control" placeholder="{{ __('Titre') }} *" value="{{ old('title', $SeoDatum->title ?? '') }}" required>
@include('back.modules.input-error', ['inputName'=>'title'])
</div>
<div class="form-group">
<label for="description">{{ __('Description') }} *</label>
<input type="text" id="description" name="description" class="form-control" placeholder="{{ __('Description') }} *" value="{{ old('description', $SeoDatum->description ?? '') }}" required>
@include('back.modules.input-error', ['inputName'=>'description'])
</div>
<div class="form-group">
<label for="keywords">{{ __('Mots Clés') }} *</label>
<input type="text" id="keywords" name="keywords" class="form-control" placeholder="{{ __('Mots Clés') }} *" value="{{ old('keywords', $SeoDatum->keywords ?? '') }}" required>
@include('back.modules.input-error', ['inputName'=>'keywords'])
</div>
</form>
@endsection
@push('scripts')
<script type="text/javascript">
var editorConfig = {
removePlugins: ["Image", "ImageCaption", "ImageStyle", "ImageToolbar", "ImageUpload"],
toolbar: ['heading', '|', 'bold', 'italic', 'link', 'bulletedList', 'numberedList', '|', 'blockQuote', 'insertTable', '|', 'undo', 'redo'],
heading: {
options: [{
model: 'paragraph',
title: 'Paragraph',
class: 'ck-heading_paragraph'
},
{
model: 'heading1',
view: 'h1',
title: 'Heading 1',
class: 'ck-heading_heading1'
},
{
model: 'heading2',
view: 'h2',
title: 'Heading 2',
class: 'ck-heading_heading2'
},
{
model: 'heading3',
view: 'h3',
title: 'Heading 3',
class: 'ck-heading_heading3'
},
{
model: 'heading4',
view: 'h4',
title: 'Heading 4',
class: 'ck-heading_heading4'
}
]
},
table: {
contentToolbar: ['tableColumn', 'tableRow', 'mergeTableCells']
}
};
ClassicEditor
.create(document.querySelector('#text'), editorConfig)
.catch(error => {
console.error(error);
});
</script>
@endpush

View file

@ -1,6 +1,7 @@
@extends('layouts.frontend')
@section('title', __('Accueil'))
@section('description', __("Découvrez DOUX, des produits de volailles françaises."))
@section('title', $seoDatum->title)
@section('description', $seoDatum->description)
@section('keywords', $seoDatum->keywords)
@section('content')
@ -126,40 +127,6 @@
@endif
@endif
@endforeach
{{--
<div class="step is-flex start right p-rel animate__animated fadeInRight animate__slow">
<span class="year">1920</span>
<div class="step_content">
<h3 class="step_title bold">Lorem Ipsum dolor sit amet.</h3>
<p class="align-justify">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</p>
<img src="{{ asset('assets/images/blog.jpg') }}" alt="photo">
</div>
</div>
<div class="step left p-rel desk-mt-n95 smrt-order animate__animated fadeInLeft animate__slow">
<img src="{{ asset('assets/images/doux-selection.jpg') }}" alt="photo">
<span class="year">2021</span>
<div class="step_content">
<h3 class="step_title bold">Lorem Ipsum dolor sit amet.</h3>
<p class="align-justify">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</p>
</div>
</div>
<div class="step special right p-rel desk-ml-150 smrt-order animate__animated fadeInRight animate__slow">
<img src="{{ asset('assets/images/doux-nuggets.jpg') }}" alt="photo">
<span class="year">2020</span>
<div class="step_content">
<h3 class="step_title bold">Lorem Ipsum dolor sit amet.</h3>
<p class="align-justify">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</p>
</div>
</div>
--}}
</div>
</div>
</section>

View file

@ -1,6 +1,7 @@
@extends('layouts.frontend')
@section('title', __('Food service'))
@section('description', __("Découvrez DOUX, des produits de volailles françaises."))
@section('title', $seoDatum->title)
@section('description', $seoDatum->description)
@section('keywords', $seoDatum->keywords)
@section('content')
@ -43,7 +44,7 @@
<div class="align-justify animate__animated fadeInRight animate__slow">
{!! $encart_food->text !!}
</div>
<a href="{{ route($routeprefixer . 'wasup') }}/#notre-histoire" class="cta">{{ __('En savoir plus') }}</a>
{{--<a href="{{ route($routeprefixer . 'wasup') }}/#notre-histoire" class="cta">{{ __('En savoir plus') }}</a>--}}
</div>
</div>
</div>

View file

@ -1,6 +1,7 @@
@extends('layouts.frontend')
@section('title', __('Accueil'))
@section('description', __("Découvrez DOUX, des produits de volailles françaises."))
@section('title', $seoDatum->title)
@section('description', $seoDatum->description)
@section('keywords', $seoDatum->keywords)
@section('content')

View file

@ -1,6 +1,7 @@
@extends('layouts.frontend')
@section('title', __('Accueil'))
@section('description', __("Découvrez DOUX, des produits de volailles françaises."))
@section('title', $seoDatum->title)
@section('description', $seoDatum->description)
@section('keywords', $seoDatum->keywords)
@section('content')

View file

@ -1,6 +1,7 @@
@extends('layouts.frontend')
@section('title', __('Accueil'))
@section('description', __("Découvrez DOUX, des produits de volailles françaises."))
@section('title', $seoDatum->title)
@section('description', $seoDatum->description)
@section('keywords', $seoDatum->keywords)
@section('content')
<div class="jumbotron">

View file

@ -1,6 +1,7 @@
@extends('layouts.frontend')
@section('title', $mentions_legales->title)
@section('description', __("Découvrez DOUX, des produits de volailles françaises."))
@section('title', $seoDatum->title)
@section('description', $seoDatum->description)
@section('keywords', $seoDatum->keywords)
@section('content')

View file

@ -1,6 +1,7 @@
@extends('layouts.frontend')
@section('title', __('Accueil'))
@section('description', __("Découvrez DOUX, des produits de volailles françaises."))
@section('title', $seoDatum->title)
@section('description', $seoDatum->description)
@section('keywords', $seoDatum->keywords)
@section('content')
@ -104,9 +105,9 @@
</div>
<p class="h2">{{ __('Nous travaillons toujours pour améliorer nos recettes et proposer des produits de meilleure qualité')}}</p>
@if (isset($products_home))
@if (isset($products_news))
<div id="carrousel2">
@foreach ($products_home as $product)
@foreach ($products_news as $product)
<div class="item is-flex">
<div class="item__image">
<a href="{{ route($routeprefixer . 'product.show', ['gammeSlug' => $product->gamme->slug , 'productSlug' => $product->slug]) }}">

View file

@ -1,6 +1,7 @@
@extends('layouts.frontend')
@section('title', $privacy_policy->title)
@section('description', __("Découvrez DOUX, des produits de volailles françaises."))
@section('title', $seoDatum->title)
@section('description', $seoDatum->description)
@section('keywords', $seoDatum->keywords)
@section('content')

View file

@ -1,6 +1,7 @@
@extends('layouts.frontend')
@section('title', __('Accueil'))
@section('description', __("Découvrez DOUX, des produits de volailles françaises."))
@section('title', $seoDatum->title)
@section('description', strip_tags($seoDatum->description))
@section('keywords', $seoDatum->keywords)
@section('content')

View file

@ -11,15 +11,19 @@
</h2>
<div id="collapseOne" class="accordion-collapse collapse" aria-labelledby="headingOne">
<div class="accordion-body">
<div class="mb-3">
<h6 class="pb-1 mb-1 text-dark border-bottom">{{ __('SLIDER') }}</h6>
<a class="nav-link py-0 ms-4" href="{{route('bo.sliders.index')}}">{{ __('Slider') }}</a>
<a class="nav-link py-0 ms-4" href="{{route('bo.slides.index')}}">{{ __('Slide') }}</a>
</div>
<div class="mb-1">
<h6 class="pb-1 mb-1 text-dark border-bottom">{{ __('ENCART DE PRESENTATION') }}</h6>
<a class="nav-link py-0 ms-4" href="{{route('bo.encarts.edit', $encart_home->id)}}">{{ __('Contenu') }}</a>
</div>
<div class="mb-1">
<h6 class="pb-1 mb-1 text-dark border-bottom">{{ __('SEO') }}</h6>
<a class="nav-link py-0 ms-4" href="{{route('bo.seo_data.edit', Page::home()->value)}}">{{ __('Data') }}</a>
</div>
<div class="mb-3">
<h6 class="pb-1 mb-1 text-dark border-bottom">{{ __('SLIDER') }}</h6>
<a class="nav-link py-0 ms-4" href="{{route('bo.sliders.index')}}">{{ __('Slider') }}</a>
<a class="nav-link py-0 ms-4" href="{{route('bo.slides.index')}}">{{ __('Slide') }}</a>
</div>
<div class="mb-1">
<h6 class="pb-1 mb-1 text-dark border-bottom">{{ __('ENCART DE PRESENTATION') }}</h6>
<a class="nav-link py-0 ms-4" href="{{route('bo.encarts.edit', $encart_home->id)}}">{{ __('Contenu') }}</a>
</div>
</div>
</div>
</div>
@ -32,6 +36,10 @@
</h2>
<div id="collapseBrand" class="accordion-collapse collapse" aria-labelledby="headingBrand">
<div class="accordion-body">
<div class="mb-1">
<h6 class="pb-1 mb-1 text-dark border-bottom">{{ __('SEO') }}</h6>
<a class="nav-link py-0 ms-4" href="{{route('bo.seo_data.edit', Page::marque()->value)}}">{{ __('Data') }}</a>
</div>
<div class="mb-3">
<h6 class="pb-1 mb-1 text-dark border-bottom">{{ __('ENCART DE PRESENTATION') }}</h6>
<a class="nav-link py-0 ms-4" href="{{route('bo.encarts.edit', $encart_marqueHeader->id)}}">{{ __('Contenu') }}</a>
@ -68,7 +76,12 @@
</h2>
<div id="collapseGammes" class="accordion-collapse collapse" aria-labelledby="headingGammes">
<div class="accordion-body">
<div class="mb-1">
<h6 class="pb-1 mb-1 text-dark border-bottom">{{ __('SEO') }}</h6>
<a class="nav-link py-0 ms-4" href="{{route('bo.seo_data.edit', Page::gammes()->value)}}">{{ __('Data') }}</a>
</div>
<div class="mb-3">
<h6 class="pb-1 mb-1 text-dark border-bottom">{{ __('Gammes') }}</h6>
<a class="nav-link py-0 ms-4" href="{{route('bo.gammes.index')}}">{{ __('Toutes les gammes') }}</a>
<a class="nav-link py-0 ms-4" href="{{route('bo.gammes.create')}}">{{ __('Ajouter une gamme') }}</a>
</div>
@ -100,6 +113,10 @@
</h2>
<div id="collapseNews" class="accordion-collapse collapse" aria-labelledby="headingNews">
<div class="accordion-body">
<div class="mb-1">
<h6 class="pb-1 mb-1 text-dark border-bottom">{{ __('SEO') }}</h6>
<a class="nav-link py-0 ms-4" href="{{route('bo.seo_data.edit', Page::news()->value)}}">{{ __('Data') }}</a>
</div>
<div class="mb-3">
<h6 class="pb-1 mb-1 text-dark border-bottom">{{ __('BLOC DES CONSEILS') }}</h6>
<a class="nav-link py-0 ms-4" href="{{route('bo.advice.edit', $advice_news->id)}}">{{ __('Contenu') }}</a>
@ -123,6 +140,10 @@
</h2>
<div id="collapseTwo" class="accordion-collapse collapse" aria-labelledby="headingTwo">
<div class="accordion-body">
<div class="mb-1">
<h6 class="pb-1 mb-1 text-dark border-bottom">{{ __('SEO') }}</h6>
<a class="nav-link py-0 ms-4" href="{{route('bo.seo_data.edit', Page::foodservice()->value)}}">{{ __('Data') }}</a>
</div>
<div class="mb-3">
<h6 class="pb-1 mb-1 text-dark border-bottom">{{ __('ENCART DE PRESENTATION') }}</h6>
<a class="nav-link py-0 ms-4" href="{{route('bo.encarts.edit', $encart_food->id)}}">{{ __('Contenu') }}</a>

View file

@ -7,6 +7,7 @@
<title>{{ config('app.name') }}@hasSection('title') - @yield('title')@endif</title>
<meta name="description" content="@yield('description')">
<meta name="keywords" content="@yield('keywords')">
@hasSection('canonical')
<link rel="canonical" href="@yield('canonical')" />
@ -19,4 +20,4 @@
<meta name="robots" content="@yield('metaIndex')">
@else
<meta name="robots" content="index, follow">
@endif
@endif

View file

@ -20,14 +20,20 @@ use App\Http\Controllers\Bo\PictoBrandsController;
use App\Http\Controllers\Bo\PictosController;
use App\Http\Controllers\Bo\PostsController;
use App\Http\Controllers\Bo\ProductsController;
use App\Http\Controllers\Bo\SeoDataController;
use App\Http\Controllers\Bo\SlidersController;
use App\Http\Controllers\Bo\SlidesController;
use App\Http\Controllers\Bo\TextsController;
use App\Http\Controllers\Bo\TitlesController;
use App\Http\Controllers\HomeController as ControllersHomeController;
use App\Http\Controllers\MarqueController as ControllersMarqueController;
use App\Http\Controllers\GammesController as ControllersGammesController;
use App\Http\Controllers\NewsController as ControllersNewsController;
use App\Http\Controllers\ProductsController as ControllersProductsController;
use App\Http\Controllers\ContactController as ControllersContactController;
use App\Http\Controllers\FoodServiceController as ControllersFoodServiceController;
use App\Http\Controllers\LegalsController as ControllersLegalsController;
use App\Http\Controllers\PolicyController as ControllersPolicyController;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Auth;
@ -78,6 +84,8 @@ Route::prefix('bo')
'slides' => SlidesController::class,
]
);
Route::resource('seo_data', SeoDataController::class)
->except(['index', 'create', 'store', 'destroy', 'show']);
Route::resource('moments', MomentsController::class)
->except(['create', 'store', 'destroy', 'show']);
Route::resource('encarts', EncartsController::class)
@ -115,18 +123,18 @@ foreach ($langs as $lang) {
->group(
function () {
Route::get('/', [ControllersHomeController::class, 'index'])->name('home');
Route::view('/notre-marque', 'front.a-propos')->name('wasup');
Route::get('/notre-marque', [ControllersMarqueController::class, 'index'])->name('wasup');
Route::get('/nos-gammes', [ControllersGammesController::class, 'index'])->name('gammes.index');
Route::get('/gamme/{gammeSlug}', [ControllersGammesController::class, 'show'])->name('gammes.show');
Route::get(
'/produit/{gammeSlug}/{productSlug}',
[ControllersProductsController::class, 'show']
)->name('product.show');
Route::view('/nos-actualites', 'front.news')->name('news');
Route::view('/food-service', 'front.food-service')->name('food');
Route::view('/mentions-legales', 'front.legals')->name('cgu');
Route::view('/charte-confidentialite', 'front.policy')->name('policy');
Route::view('/plan-site', 'front.site-map')->name('site-map');
Route::get('/nos-actualites', [ControllersNewsController::class, 'index'])->name('news');
Route::get('/food-service', [ControllersFoodServiceController::class, 'index'])->name('food');
Route::get('/mentions-legales', [ControllersLegalsController::class, 'index'])->name('cgu');
Route::get('/charte-confidentialite', [ControllersPolicyController::class, 'index'])->name('policy');
//Route::view('/plan-site', 'front.site-map')->name('site-map');
Route::get('/recherche', [ControllersProductsController::class, 'search'])->name('search');
//Classic
Route::get('/contact', [ControllersContactController::class, 'contact'])->name('contact');