feat: update config general
This commit is contained in:
parent
ac7342da82
commit
453da276ef
18 changed files with 3310 additions and 513 deletions
|
|
@ -2,7 +2,10 @@
|
|||
|
||||
namespace App\Http\Requests\Bo\GeneralConfigs;
|
||||
|
||||
use App\Enums\GeneralConfigType;
|
||||
use App\Http\Requests\Bo\UpdateMiniCrudRequest;
|
||||
use App\Rules\WysiwygLength;
|
||||
|
||||
|
||||
class UpdateGeneralConfigRequest extends UpdateMiniCrudRequest
|
||||
{
|
||||
|
|
@ -12,4 +15,21 @@ class UpdateGeneralConfigRequest extends UpdateMiniCrudRequest
|
|||
* @var string
|
||||
*/
|
||||
protected $modelName = 'general_config';
|
||||
|
||||
public function rules(): array
|
||||
{
|
||||
$rules = parent::rules();
|
||||
|
||||
if ($this->route('general_config')?->type === GeneralConfigType::engagement) {
|
||||
foreach ([1, 2, 3, 4] as $i) {
|
||||
$rules['data.engagement_' . $i . '_text.value'] = [
|
||||
'required',
|
||||
'string',
|
||||
new WysiwygLength(10, 1300),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
return $rules;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,39 @@
|
|||
<?php
|
||||
|
||||
use App\Enums\GeneralConfigType;
|
||||
use App\Models\GeneralConfig;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
$bandeau = GeneralConfig::query()->where('type', GeneralConfigType::bandeau)->firstOrFail();
|
||||
$data = json_decode(json_encode($bandeau->data), true);
|
||||
|
||||
$data['bandeau_image_subtitle']['validate'] = 'nullable|min:4|max:180';
|
||||
|
||||
$bandeau->data = $data;
|
||||
$bandeau->saveQuietly();
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
$bandeau = GeneralConfig::query()->where('type', GeneralConfigType::bandeau)->firstOrFail();
|
||||
|
||||
$data = json_decode(json_encode($bandeau->data), true);
|
||||
$data['bandeau_image_subtitle']['validate'] = 'required|min:4|max:255';
|
||||
|
||||
$bandeau->data = $data;
|
||||
$bandeau->saveQuietly();
|
||||
}
|
||||
};
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
<?php
|
||||
|
||||
use App\Enums\GeneralConfigType;
|
||||
use App\Models\GeneralConfig;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
$demarche = GeneralConfig::query()->where('type', GeneralConfigType::demarche)->firstOrFail();
|
||||
$data = json_decode(json_encode($demarche->data), true);
|
||||
|
||||
$data['demarche_pictures_subtitle']['validate'] = 'nullable|min:4|max:150';
|
||||
|
||||
$demarche->data = $data;
|
||||
$demarche->saveQuietly();
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
$demarche = GeneralConfig::query()->where('type', GeneralConfigType::demarche)->firstOrFail();
|
||||
$data = json_decode(json_encode($demarche->data), true);
|
||||
|
||||
$data['demarche_pictures_subtitle']['validate'] = 'required|min:4|max:150';
|
||||
|
||||
$demarche->data = $data;
|
||||
$demarche->saveQuietly();
|
||||
}
|
||||
};
|
||||
|
|
@ -0,0 +1,195 @@
|
|||
<?php
|
||||
|
||||
use App\Enums\GeneralConfigType;
|
||||
use App\Enums\InputType;
|
||||
use App\Models\GeneralConfig;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
private array $backup = [
|
||||
"engagement_5_text" => [
|
||||
"label" => "Contenu 5",
|
||||
"inputType" => ["label" => "text", "value" => 3],
|
||||
"validate" => "string|min:10",
|
||||
"value" =>
|
||||
"<p>Nature d’Éleveurs, <strong>la santé des volailles</strong> préservée :<br>- L’hygiène et la sécurité sanitaire renforcées à toutes les étapes de la filière : protocoles de protection des élevages, tenues dédiées aux poulaillers, etc.<br>- L’encadrement de la santé par les vétérinaires,<br>- Des solutions naturelles sont développées comme alternatives aux antibiotiques, utilisés en dernier recours pour soigner les animaux.</p>",
|
||||
],
|
||||
"engagement_5_banner" => [
|
||||
"label" => "Banniere 5",
|
||||
"inputType" => ["label" => "Image", "value" => 1],
|
||||
"dimensions" => ["width" => 1312, "height" => 639],
|
||||
"alt" => "voluptatem sint et ea",
|
||||
"value" =>
|
||||
"storage/images/general_configs/f02fa939-26e0-4514-8179-ec29edbe25d5-eng-eleveur.jpg",
|
||||
"validate" => "required",
|
||||
],
|
||||
"engagement_6_text" => [
|
||||
"label" => "Contenu 6",
|
||||
"inputType" => ["label" => "text", "value" => 3],
|
||||
"validate" => "string|min:10",
|
||||
"value" =>
|
||||
"<p>Nature d’Éleveurs, le <strong>respect de la nature</strong> par une démarche de progrès :<br>- L’intégration paysagère des élevages (plantations d’arbres et de haies, etc.),<br>- La préservation des ressources (énergie, eau, carbone, etc.),<br>- Le recyclage des déchets.<br>Nature d’Éleveurs <strong>valorise les territoires</strong> et <strong>repose sur des filières locales</strong>.</p>",
|
||||
],
|
||||
"engagement_6_banner" => [
|
||||
"label" => "Banniere 6",
|
||||
"inputType" => ["label" => "Image", "value" => 1],
|
||||
"dimensions" => ["width" => 1312, "height" => 414],
|
||||
"alt" => "vel odio veritatis eligendi",
|
||||
"value" =>
|
||||
"storage/images/general_configs/26529e76-ec2d-4949-ad76-496944ce366b-eng-batiment.jpg",
|
||||
"validate" => "required",
|
||||
],
|
||||
"engagement_7_text" => [
|
||||
"label" => "Contenu 7",
|
||||
"inputType" => ["label" => "text", "value" => 3],
|
||||
"validate" => "string|min:10",
|
||||
"value" =>
|
||||
"<p>Nature d’Éleveurs, des <strong>filières de qualité, transparentes</strong> et <strong>contrôlées chaque année</strong>.<br>Des <strong>organismes indépendants</strong> garantissent, via 70 points de contrôle, le respect des engagements du cahier des charges auprès de <strong>chaque élevage</strong>.</p>",
|
||||
],
|
||||
"engagement_7_banner" => [
|
||||
"label" => "Banniere 7",
|
||||
"inputType" => ["label" => "Image", "value" => 1],
|
||||
"dimensions" => ["width" => 1775, "height" => 560],
|
||||
"alt" => "et ut illo ex",
|
||||
"value" =>
|
||||
"storage/images/general_configs/40f0301c-b18e-40d0-aff0-5fbc76d88023-eng-stylo.jpg",
|
||||
"validate" => "required",
|
||||
],
|
||||
"engagement_8_text" => [
|
||||
"label" => "Contenu 8",
|
||||
"inputType" => ["label" => "text", "value" => 3],
|
||||
"validate" => "string|min:10",
|
||||
"value" =>
|
||||
"<p>Nature d’Éleveurs, une démarche qui <strong>fédère les filières</strong> et <strong>accompagne les éleveurs</strong> :<br>- Au niveau technique : comme c’est le cas dans tous les élevages, et conformément à la réglementation, des formations au bien-être animal, à la sécurité sanitaire, à la conduite d’élevage, …<br>- Au niveau économique : des prix sécurisés par des contrats, des primes qualité, des aides aux investissements…</p>",
|
||||
],
|
||||
"engagement_8_banner" => [
|
||||
"label" => "Banniere 8",
|
||||
"inputType" => ["label" => "Image", "value" => 1],
|
||||
"dimensions" => ["width" => 1775, "height" => 865],
|
||||
"alt" => "est sed est quis",
|
||||
"value" =>
|
||||
"storage/images/general_configs/fc5fb1b7-63a1-46ef-a6d4-ad1f141d17aa-eng-groupe-volaille.jpg",
|
||||
"validate" => "required",
|
||||
],
|
||||
];
|
||||
|
||||
private array $reordered = [
|
||||
'engagement_title' => [
|
||||
'label' => 'Titre bandeau',
|
||||
'inputType' => ['label' => 'string', 'value' => 2],
|
||||
'value' => 'NOS ENGAGEMENTS VOLAILLE',
|
||||
'validate' => 'required|min:4|max:100',
|
||||
],
|
||||
'engagement_subtitle' => [
|
||||
'label' => 'Sous-titre bandeau',
|
||||
'inputType' => ['label' => 'string', 'value' => 2],
|
||||
'value' => 'EN 8 POINTS CLÉS',
|
||||
'validate' => 'required|min:4|max:100',
|
||||
],
|
||||
];
|
||||
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
$engagement = GeneralConfig::query()->where('type', GeneralConfigType::engagement)->firstOrFail();
|
||||
$data = json_decode(json_encode($engagement->data), true);
|
||||
|
||||
for ($i = 5; $i <= 8; $i++) {
|
||||
unset($data['engagement_' . $i . '_text']);
|
||||
unset($data['engagement_' . $i . '_banner']);
|
||||
}
|
||||
|
||||
foreach ([1, 2, 3, 4] as $i) {
|
||||
unset($data['engagement_' . $i . '_2_banner']);
|
||||
|
||||
$logo = [
|
||||
'label' => "Logo engagement n°$i",
|
||||
'inputType' => [
|
||||
"label" => InputType::image->label(),
|
||||
"value" => InputType::image->value(),
|
||||
],
|
||||
'dimensions' => [
|
||||
'width' => 150,
|
||||
'height' => 140
|
||||
],
|
||||
'alt' => "",
|
||||
'title' => "",
|
||||
'value' => null,
|
||||
'required' => true,
|
||||
'validate' => 'required',
|
||||
];
|
||||
|
||||
$title = [
|
||||
'label' => 'Titre engagement n°' . $i,
|
||||
'inputType' => [
|
||||
'label' => InputType::string->label(),
|
||||
'value' => InputType::string->value(),
|
||||
],
|
||||
'value' => '',
|
||||
'validate' => 'required|min:4|max:80',
|
||||
];
|
||||
|
||||
$subtitle = [
|
||||
'label' => 'Sous titre engagement n°' . $i,
|
||||
'inputType' => [
|
||||
'label' => InputType::string->label(),
|
||||
'value' => InputType::string->value(),
|
||||
],
|
||||
'value' => '',
|
||||
'validate' => 'nullable|min:4|max:120',
|
||||
];
|
||||
|
||||
// change dimension for banner
|
||||
$data['engagement_' . $i . '_banner']['dimensions'] = [
|
||||
'width' => 885,
|
||||
'height' => 300,
|
||||
];
|
||||
|
||||
if (isset($data['engagement_' . $i . '_2_banner'])) {
|
||||
$data['engagement_' . $i . '_2_banner']['dimensions'] = [
|
||||
'width' => 885,
|
||||
'height' => 300,
|
||||
];
|
||||
}
|
||||
|
||||
$this->reordered['engagement_' . $i . '_banner'] = $data['engagement_' . $i . '_banner'];
|
||||
|
||||
if (isset($data['engagement_' . $i . '_2_banner'])) {
|
||||
$this->reordered['engagement_' . $i . '_2_banner'] = $data['engagement_' . $i . '_2_banner'];
|
||||
}
|
||||
|
||||
$this->reordered['engagement_' . $i . '_logo'] = $logo;
|
||||
$this->reordered['engagement_' . $i . '_banner'] = $data['engagement_' . $i . '_banner'];
|
||||
$this->reordered['engagement_' . $i . '_title'] = $title;
|
||||
$this->reordered['engagement_' . $i . '_subtitle'] = $subtitle;
|
||||
$this->reordered['engagement_' . $i . '_text'] = $data['engagement_' . $i . '_text'];
|
||||
}
|
||||
|
||||
$engagement->data = $this->reordered;
|
||||
$engagement->saveQuietly();
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
$engagement = GeneralConfig::query()->where('type', GeneralConfigType::engagement)->firstOrFail();
|
||||
$data = json_decode(json_encode($engagement->data), true);
|
||||
|
||||
for ($i = 1; $i <= 4; $i++) {
|
||||
unset($data['engagement_' . $i . '_logo']);
|
||||
unset($data['engagement_' . $i . '_title']);
|
||||
unset($data['engagement_' . $i . '_subtitle']);
|
||||
}
|
||||
|
||||
$data = array_merge($data, $this->backup);
|
||||
|
||||
$engagement->data = $data;
|
||||
$engagement->saveQuietly();
|
||||
}
|
||||
};
|
||||
2743
package-lock.json
generated
2743
package-lock.json
generated
File diff suppressed because it is too large
Load diff
Binary file not shown.
|
Before Width: | Height: | Size: 83 KiB After Width: | Height: | Size: 54 KiB |
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 861 KiB After Width: | Height: | Size: 52 KiB |
|
|
@ -1,142 +0,0 @@
|
|||
$bea-blue: #2e267b;
|
||||
$bea-red: #e60f1d;
|
||||
$bea-red-hover: #c80510;
|
||||
|
||||
.bea-banner {
|
||||
background-color: $bea-blue;
|
||||
font-family: Poppins, sans-serif;
|
||||
|
||||
&__intro {
|
||||
font-size: 0.75rem;
|
||||
letter-spacing: 0.025em;
|
||||
|
||||
@media (width >= 576px) {
|
||||
font-size: 0.875rem;
|
||||
}
|
||||
}
|
||||
|
||||
&__title {
|
||||
font-size: 1.25rem;
|
||||
|
||||
@media (width >= 576px) {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
|
||||
@media (width >= 992px) {
|
||||
font-size: 1.85rem;
|
||||
}
|
||||
}
|
||||
|
||||
&__desc {
|
||||
max-width: 38rem;
|
||||
font-size: 0.875rem;
|
||||
|
||||
@media (width >= 576px) {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
@media (width >= 992px) {
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
}
|
||||
|
||||
&__logo {
|
||||
width: 9rem;
|
||||
filter: drop-shadow(0 4px 3px rgb(0 0 0 / 7%));
|
||||
|
||||
@media (width >= 576px) {
|
||||
width: 11rem;
|
||||
}
|
||||
|
||||
@media (width >= 992px) {
|
||||
width: 12.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
&__heart {
|
||||
position: absolute;
|
||||
top: -1.2rem;
|
||||
right: -3rem;
|
||||
width: 2.25rem;
|
||||
height: 2.25rem;
|
||||
transform: rotate(15deg);
|
||||
|
||||
@media (width >= 992px) {
|
||||
top: -1.5rem;
|
||||
right: -3.5rem;
|
||||
width: 2.75rem;
|
||||
height: 2.75rem;
|
||||
}
|
||||
}
|
||||
|
||||
&__heart-mobile {
|
||||
width: 3rem;
|
||||
height: 3rem;
|
||||
transform: rotate(15deg);
|
||||
}
|
||||
|
||||
&__ldc-mobile {
|
||||
width: 9rem;
|
||||
}
|
||||
|
||||
&__ldc-desktop {
|
||||
position: relative;
|
||||
top: 1rem;
|
||||
width: 9.5rem;
|
||||
|
||||
@media (width >= 992px) {
|
||||
width: 10.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
&__cta {
|
||||
padding: 0.75rem 1.75rem;
|
||||
border-color: $bea-red;
|
||||
background-color: $bea-red;
|
||||
font-size: 0.875rem;
|
||||
transition: all 0.2s ease-in-out;
|
||||
|
||||
&:hover {
|
||||
border-color: $bea-red-hover;
|
||||
background-color: $bea-red-hover;
|
||||
}
|
||||
|
||||
&:active {
|
||||
transform: scale(0.95);
|
||||
}
|
||||
|
||||
@media (width >= 576px) {
|
||||
font-size: 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
&__cta-icon {
|
||||
width: 1rem;
|
||||
height: 1rem;
|
||||
|
||||
@media (width >= 576px) {
|
||||
width: 1.25rem;
|
||||
height: 1.25rem;
|
||||
}
|
||||
}
|
||||
|
||||
&__sun {
|
||||
z-index: 1;
|
||||
right: 1rem;
|
||||
bottom: -2rem;
|
||||
width: 6rem;
|
||||
transform: rotate(26deg);
|
||||
|
||||
@media (width >= 576px) {
|
||||
right: 2rem;
|
||||
bottom: -3rem;
|
||||
width: 9rem;
|
||||
}
|
||||
|
||||
@media (width >= 992px) {
|
||||
right: 2rem;
|
||||
bottom: -4.5rem;
|
||||
width: 13rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -12,7 +12,6 @@
|
|||
// * BASE
|
||||
@import "./base/common";
|
||||
@import './base/fonts';
|
||||
@import './base/bea_banner';
|
||||
|
||||
// * PARTIALS
|
||||
@import './partials/global';
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@
|
|||
}
|
||||
|
||||
#demarche ul li {
|
||||
max-width: 10rem;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: flex-end;
|
||||
|
|
|
|||
|
|
@ -1,104 +1,53 @@
|
|||
#engagements .general {
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
#engagements {
|
||||
.engagement-icon {
|
||||
width: 10rem;
|
||||
height: 10rem;
|
||||
flex-shrink: 0;
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
#engagements .number {
|
||||
flex-direction: row;
|
||||
align-items: flex-start;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
.engagement-image-col {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/* stylelint-disable-next-line selector-no-qualifying-type */
|
||||
#engagements div.supertitle {
|
||||
display: flex;
|
||||
width: 4rem;
|
||||
height: 4rem;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border-radius: 100%;
|
||||
background-color: var(--yellow);
|
||||
}
|
||||
.engagement-image {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
#engagements .desc {
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
justify-content: center;
|
||||
}
|
||||
.flag {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#engagements .icon {
|
||||
width: 20rem;
|
||||
max-width: 20rem;
|
||||
height: auto;
|
||||
max-height: 15rem;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
.flag::after {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
width: 14rem;
|
||||
height: 1rem;
|
||||
background-image: url("@/images/eng_drapeau.svg");
|
||||
background-position: center;
|
||||
background-repeat: no-repeat;
|
||||
background-size: contain;
|
||||
content: "";
|
||||
}
|
||||
|
||||
#engagements .flag {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#engagements .flag::after {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
width: 14rem;
|
||||
height: 1rem;
|
||||
background-image: url("@/images/eng_drapeau.svg");
|
||||
background-position: center;
|
||||
background-repeat: no-repeat;
|
||||
background-size: contain;
|
||||
content: "";
|
||||
}
|
||||
|
||||
#engagements .imgs img {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
@media (width <= 767px) {
|
||||
#engagements ul {
|
||||
margin: 0;
|
||||
}
|
||||
#engagements {
|
||||
.flag {
|
||||
padding-bottom: 2rem;
|
||||
}
|
||||
|
||||
#navigation ul li {
|
||||
margin-bottom: 3rem;
|
||||
.flag::after {
|
||||
top: auto;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
height: 0.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
#engagements .general {
|
||||
margin: 1rem;
|
||||
}
|
||||
|
||||
#engagements .general,
|
||||
#engagements .general div:first-child {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
#engagements .number {
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
#engagements .number span {
|
||||
margin: 0 0 1rem;
|
||||
font-size: 50px;
|
||||
}
|
||||
|
||||
#engagements .icon {
|
||||
width: 100%;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
#engagements .flag {
|
||||
padding-bottom: 2rem;
|
||||
}
|
||||
|
||||
#engagements .flag::after {
|
||||
top: auto;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
height: 0.5rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -7,16 +7,42 @@
|
|||
background-size: cover;
|
||||
}
|
||||
|
||||
#home h1 {
|
||||
#home .hero-content {
|
||||
position: absolute;
|
||||
bottom: 4rem;
|
||||
left: 6rem;
|
||||
bottom: 2rem;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#home .hero-title {
|
||||
max-width: 35rem;
|
||||
margin: 0 0 3rem 6rem;
|
||||
}
|
||||
|
||||
#home .hero-subtitle {
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
padding: 1.2rem 12rem;
|
||||
margin: 0;
|
||||
background-color: rgb(52 38 23 / 80%);
|
||||
color: $color-white;
|
||||
font-size: 28px;
|
||||
}
|
||||
|
||||
@media (width <= 1080px) {
|
||||
#home {
|
||||
background-position: right;
|
||||
}
|
||||
|
||||
#home .hero-title {
|
||||
margin: 0 0 1rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#home .hero-subtitle {
|
||||
padding: 1rem;
|
||||
font-size: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (width <= 767px) {
|
||||
|
|
@ -26,9 +52,20 @@
|
|||
background-position: right;
|
||||
}
|
||||
|
||||
#home h1 {
|
||||
#home .hero-content {
|
||||
position: absolute;
|
||||
bottom: -15%;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#home .hero-title {
|
||||
margin: 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#home .hero-subtitle {
|
||||
display: none;
|
||||
padding: 1rem;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,12 +2,14 @@
|
|||
@foreach ($model->data as $k => $input)
|
||||
@php
|
||||
$input = json_decode(json_encode($input), true);
|
||||
$isRequired = \Illuminate\Support\Str::contains($input['validate'] ?? '', 'required')
|
||||
&& !\Illuminate\Support\Str::contains($input['validate'] ?? '', ['nullable', 'sometimes', 'required_']);
|
||||
@endphp
|
||||
@switch(intval($input['inputType']['value']))
|
||||
@case(intval(\App\Enums\InputType::string->value))
|
||||
<div class="minicrud-input col-12 col-md-6 mb-3">
|
||||
<fieldset class="h-100 border p-3">
|
||||
<legend>{{ $input['label'] }} *</legend>
|
||||
<legend>{{ $input['label'] }}{{ $isRequired ? ' *' : '' }}</legend>
|
||||
<div class="row">
|
||||
<div class="col-12 mb-3">
|
||||
@include('bo.partials.inputs.varchar', [
|
||||
|
|
@ -16,7 +18,7 @@
|
|||
'hasWordCounter' => true,
|
||||
'name' => 'data[' . $k . '][value]',
|
||||
'value' => old("data.{$k}.value", $input['value'] ?? null),
|
||||
'required' => isset($input['required']) ? !empty($input['required']) : true,
|
||||
'required' => $isRequired,
|
||||
'model' => $model ?? null,
|
||||
'helper' => __('validation.between.string', [
|
||||
'attribute' => $input['label'],
|
||||
|
|
@ -50,9 +52,10 @@
|
|||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="form-group">
|
||||
<input class="form-control" id="number{{ $k }}" name="data[{{ $k }}][value]" type="number"
|
||||
value="{{ old("data.{$k}.value") ?? ($input['value'] ?? '') }}" aria-describedby="NumberHelp{{ $k }}"
|
||||
step="0.01" placeholder="{{ $input['label'] }}" @if (!isset($input['required']) or $input['required']) required @endif>
|
||||
<input class="form-control" id="number{{ $k }}" name="data[{{ $k }}][value]"
|
||||
type="number" value="{{ old("data.{$k}.value") ?? ($input['value'] ?? '') }}"
|
||||
aria-describedby="NumberHelp{{ $k }}" step="0.01"
|
||||
placeholder="{{ $input['label'] }}" @if (!isset($input['required']) or $input['required']) required @endif>
|
||||
@include('modules.input-error', [
|
||||
'inputName' => "data.{$k}.value",
|
||||
'helperId' => "NumberHelp{$k}",
|
||||
|
|
@ -101,8 +104,9 @@
|
|||
<label class="col-form-label"
|
||||
for="{{ Str::slug($input['label']) }}"><b>{{ __('crud.minicrud.visibility_label') }}</b></label>
|
||||
<div class="form-check form-switch ms-2">
|
||||
<input class="form-check-input ml-2" id="{{ Str::slug($input['label']) }}" name="data[{{ $k }}][value]"
|
||||
type="checkbox" value="1" aria-describedby="{{ Str::slug($input['label']) }}Help"
|
||||
<input class="form-check-input ml-2" id="{{ Str::slug($input['label']) }}"
|
||||
name="data[{{ $k }}][value]" type="checkbox" value="1"
|
||||
aria-describedby="{{ Str::slug($input['label']) }}Help"
|
||||
@if (old("data.{$k}.value", old('_token') ? false : $input['value'] ?? (null ?? false))) checked @endif>
|
||||
</div>
|
||||
@include('modules.input-error', [
|
||||
|
|
@ -185,9 +189,9 @@
|
|||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="form-group">
|
||||
<input class="form-control" id="title{{ $k }}" name="data[{{ $k }}][value]" type="email"
|
||||
value="{{ old("data.{$k}.value") ?? ($input['value'] ?? '') }}" placeholder="{{ $input['label'] }}"
|
||||
@if (!isset($input['required']) or $input['required']) required @endif>
|
||||
<input class="form-control" id="title{{ $k }}" name="data[{{ $k }}][value]"
|
||||
type="email" value="{{ old("data.{$k}.value") ?? ($input['value'] ?? '') }}"
|
||||
placeholder="{{ $input['label'] }}" @if (!isset($input['required']) or $input['required']) required @endif>
|
||||
@include('modules.input-error', [
|
||||
'inputName' => "data.{$k}.value",
|
||||
'helperId' => "{$k}StringHelp",
|
||||
|
|
|
|||
|
|
@ -1,70 +0,0 @@
|
|||
<section class="bea-banner mb-5" id="bea-encart" aria-label="{{ __('front.bea_banner.region_label') }}">
|
||||
<div class="bea-banner__container position-relative overflow-hidden pt-5 text-white shadow-lg">
|
||||
|
||||
<div class="container py-4">
|
||||
<div class="row align-items-center align-items-md-start position-relative gy-4 mb-5">
|
||||
|
||||
{{-- Colonne gauche (Logo + lien) --}}
|
||||
<div class="col-12 col-lg-auto d-flex flex-column align-items-center text-center">
|
||||
<img class="bea-banner__logo object-fit-contain" src="{{ Vite::asset('resources/assets/images/bea/logo_bea.svg') }}"
|
||||
title="{{ __('front.bea_banner.logo_alt') }}" alt="{{ __('front.bea_banner.logo_alt') }}" />
|
||||
<p class="bea-banner__intro fw-semibold lh-sm fs-4 mb-0 mt-2">
|
||||
{!! __('front.bea_banner.commitments_intro', ['br' => '<br />']) !!}
|
||||
<a class="text-decoration-underline text-white" href="https://www.bienetreanimal.fr"
|
||||
title="{{ __('front.bea_banner.site_link_title') }}" aria-label="{{ __('front.bea_banner.site_link_aria') }}" target="_blank"
|
||||
rel="noopener noreferrer">
|
||||
{{ __('front.bea_banner.site_url_text') }}
|
||||
<span class="visually-hidden">({{ __('front.bea_banner.new_window') }})</span>
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
{{-- Colonne centrale (Textes + CTA) --}}
|
||||
<div class="col-12 col-lg text-md-start ps-md-4 ps-lg-5 text-center">
|
||||
<h2 class="bea-banner__title text-uppercase fw-semibold lh-sm mb-0">
|
||||
{{ __('front.bea_banner.company') }}<br />
|
||||
<span class="position-relative d-inline-flex align-items-center text-uppercase">
|
||||
<span class="fs-3">{{ __('front.bea_banner.title') }}</span>
|
||||
<img class="bea-banner__heart d-none d-md-inline-block object-fit-contain"
|
||||
src="{{ Vite::asset('resources/assets/images/bea/coeur.svg') }}" alt="" role="presentation" aria-hidden="true" />
|
||||
</span><br />
|
||||
<span class="fs-4">{{ __('front.bea_banner.subtitle') }}</span>
|
||||
</h2>
|
||||
|
||||
{{-- Signature visible uniquement sur mobile --}}
|
||||
<div class="d-flex flex-column align-items-end d-md-none mb-3 mt-3">
|
||||
<img class="bea-banner__heart-mobile object-fit-contain pe-3" src="{{ Vite::asset('resources/assets/images/bea/coeur.svg') }}"
|
||||
alt="" role="presentation" aria-hidden="true" />
|
||||
<img class="bea-banner__ldc-mobile object-fit-contain" src="{{ Vite::asset('resources/assets/images/bea/nat-sign.png') }}"
|
||||
title="{{ __('front.bea_banner.ldc_alt') }}" alt="{{ __('front.bea_banner.ldc_alt') }}" />
|
||||
</div>
|
||||
|
||||
<div class="d-none d-md-flex float-md-end align-self-start pe-4 pt-0">
|
||||
<img class="bea-banner__ldc-desktop object-fit-contain" src="{{ Vite::asset('resources/assets/images/bea/nat-sign.png') }}"
|
||||
title="{{ __('front.bea_banner.ldc_alt') }}" alt="{{ __('front.bea_banner.ldc_alt') }}" />
|
||||
</div>
|
||||
|
||||
<p class="bea-banner__desc fw-medium lh-sm mb-0 mt-3 text-white">
|
||||
{!! __('front.bea_banner.description', ['br' => '<br />']) !!}
|
||||
</p>
|
||||
|
||||
<div class="d-flex justify-content-center justify-content-md-start mt-4">
|
||||
<a class="bea-banner__cta btn rounded-pill fw-bold d-inline-flex align-items-center gap-2 text-white shadow-sm"
|
||||
href="https://www.bienetreanimal.fr" title="{{ __('front.bea_banner.cta_title') }}"
|
||||
aria-label="{{ __('front.bea_banner.cta_aria') }}" target="_blank" rel="noopener noreferrer">
|
||||
<span>{{ __('front.bea_banner.cta_text') }}</span>
|
||||
<svg class="bea-banner__cta-icon flex-shrink-0" aria-hidden="true" focusable="false" fill="none" stroke="currentColor"
|
||||
stroke-width="3" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7" />
|
||||
</svg>
|
||||
<span class="visually-hidden">({{ __('front.bea_banner.new_window') }})</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Décoration Soleil --}}
|
||||
<img class="bea-banner__sun position-absolute object-fit-contain pe-none user-select-none"
|
||||
src="{{ Vite::asset('resources/assets/images/bea/soleil.svg') }}" alt="" role="presentation" aria-hidden="true" />
|
||||
</div>
|
||||
</section>
|
||||
|
|
@ -36,11 +36,13 @@
|
|||
@endif
|
||||
@endfor
|
||||
</ul>
|
||||
<p class="text-italic text-center">
|
||||
{{ $configDemarche->data['demarche_pictures_subtitle']['value'] }}
|
||||
</p>
|
||||
@if (!empty($configBandeau->data['demarche_pictures_subtitle']['value']))
|
||||
<p class="text-italic text-center">
|
||||
{{ $configDemarche->data['demarche_pictures_subtitle']['value'] }}
|
||||
</p>
|
||||
@endif
|
||||
@endif
|
||||
<h3 class="subtitle text-yellow mt2 text-center">
|
||||
{{-- <h3 class="subtitle text-yellow mt2 text-center">
|
||||
{{ $configDemarche->data['demarche_pictures_video_title']['value'] }}
|
||||
</h3>
|
||||
<div class="flex-center mt2 mr4 mb2 ml4 videos flex">
|
||||
|
|
@ -60,5 +62,5 @@
|
|||
</strong>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div> --}}
|
||||
</section>
|
||||
|
|
|
|||
|
|
@ -1,23 +1,17 @@
|
|||
<div class="general flex">
|
||||
<div class="text mb1 flex flex-grow">
|
||||
<div class="number flex">
|
||||
<div class="supertitle mr1 ml4 flex-center flex text-center text-white">{{ $index }}</div>
|
||||
<div class="row align-items-center gy-3 mb-4 engagement-block">
|
||||
<div class="col-12 col-md-6 d-flex flex-column flex-md-row align-items-center gap-md-5 text-center text-md-start order-1 {{ isset($reverse) ? 'order-md-2 flex-md-row-reverse' : 'order-md-1' }}">
|
||||
<div class="col-md-8 col-lg-4 col-sm-6 text-center {{ !isset($reverse) ? 'text-lg-start' : 'text-lg-end'}}">
|
||||
<img src="{{ asset($icon['picture']) }}" alt="{{ $icon['alt'] }}" class="engagement-icon">
|
||||
</div>
|
||||
<div class="desc @if (isset($flag)) flag @endif ck-content flex">
|
||||
{!! clean($textField['value']) !!}
|
||||
<div class="col-md-5 col-lg-6 col-sm-9 text-center engagement-heading pt-3">
|
||||
<p class="fw-bold mb-0">{{ $titleField['value'] }}</p>
|
||||
<p class="fw-bold mb-0">{{ $subtitleField['value'] }}</p>
|
||||
</div>
|
||||
</div>
|
||||
@if (isset($icon))
|
||||
<div class="icon flex">
|
||||
<img src="{{ Vite::asset('resources/assets/images/' . $icon['picture']) }}" alt="{{ $icon['alt'] }}">
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
<div class="imgs mb1">
|
||||
<img class="illustration" src="{{ asset($bannerField['value']) }}" alt="{{ $bannerField['alt'] }}">
|
||||
</div>
|
||||
@if (isset($banner2Field))
|
||||
<div class="imgs mb1">
|
||||
<img class="illustration" src="{{ asset($banner2Field['value']) }}" alt="{{ $banner2Field['alt'] }}">
|
||||
<div class="col-12 order-2 order-md-3 ck-content @if (isset($flag)) flag @endif">
|
||||
{!! clean($textField['value']) !!}
|
||||
</div>
|
||||
@endif
|
||||
<div class="col-12 col-md-6 order-3 {{ isset($reverse) ? 'order-md-1' : 'order-md-2' }}">
|
||||
<img src="{{ asset($bannerField['value']) }}" alt="{{ $bannerField['alt'] }}" class="img-fluid w-100 engagement-image">
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -8,26 +8,31 @@
|
|||
<em class="text-yellow">{{ $configDemarche->data['engagement_subtitle']['value'] }}</em>
|
||||
</h2>
|
||||
</div>
|
||||
<div class="content mb-2">
|
||||
@include('fo.partials.bea_content')
|
||||
</div>
|
||||
<ul class="ml4 mb4 mr4">
|
||||
<ul class="ml4 mb4 mr4 mt2">
|
||||
<li>
|
||||
@include('fo.partials.engagement', [
|
||||
'index' => 1,
|
||||
'flag' => true,
|
||||
'bannerField' => $configDemarche->data['engagement_1_banner'],
|
||||
'titleField' => $configDemarche->data['engagement_1_title'],
|
||||
'subtitleField' => $configDemarche->data['engagement_1_subtitle'],
|
||||
'textField' => $configDemarche->data['engagement_1_text'],
|
||||
'icon' => [
|
||||
'picture' => $configDemarche->data['engagement_1_logo']['value'],
|
||||
'alt' => $configDemarche->data['engagement_1_logo']['alt'],
|
||||
],
|
||||
])
|
||||
</li>
|
||||
<li>
|
||||
@include('fo.partials.engagement', [
|
||||
'index' => 2,
|
||||
'reverse' => true,
|
||||
'bannerField' => $configDemarche->data['engagement_2_banner'],
|
||||
'titleField' => $configDemarche->data['engagement_2_title'],
|
||||
'subtitleField' => $configDemarche->data['engagement_2_subtitle'],
|
||||
'textField' => $configDemarche->data['engagement_2_text'],
|
||||
'icon' => [
|
||||
'picture' => 'eng_cereales.svg',
|
||||
'alt' => 'Céréales',
|
||||
'picture' => $configDemarche->data['engagement_2_logo']['value'],
|
||||
'alt' => $configDemarche->data['engagement_2_logo']['alt'],
|
||||
],
|
||||
])
|
||||
</li>
|
||||
|
|
@ -35,58 +40,26 @@
|
|||
@include('fo.partials.engagement', [
|
||||
'index' => 3,
|
||||
'bannerField' => $configDemarche->data['engagement_3_banner'],
|
||||
'banner2Field' => $configDemarche->data['engagement_3_2_banner'],
|
||||
'textField' => $configDemarche->data['engagement_3_text'],
|
||||
'titleField' => $configDemarche->data['engagement_3_title'],
|
||||
'subtitleField' => $configDemarche->data['engagement_3_subtitle'],
|
||||
'icon' => [
|
||||
'picture' => $configDemarche->data['engagement_3_logo']['value'],
|
||||
'alt' => $configDemarche->data['engagement_3_logo']['alt'],
|
||||
],
|
||||
])
|
||||
</li>
|
||||
<li>
|
||||
@include('fo.partials.engagement', [
|
||||
'index' => 4,
|
||||
'reverse' => true,
|
||||
'bannerField' => $configDemarche->data['engagement_4_banner'],
|
||||
'textField' => $configDemarche->data['engagement_4_text'],
|
||||
])
|
||||
</li>
|
||||
<li>
|
||||
@include('fo.partials.engagement', [
|
||||
'index' => 5,
|
||||
'bannerField' => $configDemarche->data['engagement_5_banner'],
|
||||
'textField' => $configDemarche->data['engagement_5_text'],
|
||||
'titleField' => $configDemarche->data['engagement_4_title'],
|
||||
'subtitleField' => $configDemarche->data['engagement_4_subtitle'],
|
||||
'icon' => [
|
||||
'picture' => 'eng_plume.png',
|
||||
'alt' => 'Plume',
|
||||
],
|
||||
])
|
||||
</li>
|
||||
<li>
|
||||
@include('fo.partials.engagement', [
|
||||
'index' => 6,
|
||||
'bannerField' => $configDemarche->data['engagement_6_banner'],
|
||||
'textField' => $configDemarche->data['engagement_6_text'],
|
||||
'icon' => [
|
||||
'picture' => 'eng_abeille.svg',
|
||||
'alt' => 'Abeille',
|
||||
],
|
||||
])
|
||||
</li>
|
||||
<li>
|
||||
@include('fo.partials.engagement', [
|
||||
'index' => 7,
|
||||
'bannerField' => $configDemarche->data['engagement_7_banner'],
|
||||
'textField' => $configDemarche->data['engagement_7_text'],
|
||||
'icon' => [
|
||||
'picture' => 'eng_tampon.png',
|
||||
'alt' => 'Tampon',
|
||||
],
|
||||
])
|
||||
</li>
|
||||
<li>
|
||||
@include('fo.partials.engagement', [
|
||||
'index' => 8,
|
||||
'bannerField' => $configDemarche->data['engagement_8_banner'],
|
||||
'textField' => $configDemarche->data['engagement_8_text'],
|
||||
'icon' => [
|
||||
'picture' => 'eng_content.svg',
|
||||
'alt' => 'Éleveur content',
|
||||
'picture' => $configDemarche->data['engagement_4_logo']['value'],
|
||||
'alt' => $configDemarche->data['engagement_4_logo']['alt'],
|
||||
],
|
||||
])
|
||||
</li>
|
||||
|
|
|
|||
|
|
@ -2,10 +2,14 @@
|
|||
$configBandeau = $configList->get(App\Enums\GeneralConfigType::bandeau->value());
|
||||
@endphp
|
||||
<section class="w100" id="home">
|
||||
<h1 class="supertitle text-brown text-center">
|
||||
<span>{{ $configBandeau->data['bandeau_image_title']['value'] }}</span><br>
|
||||
<span>{{ $configBandeau->data['bandeau_image_subtitle']['value'] }}</span>
|
||||
</h1>
|
||||
<div class="hero-content">
|
||||
<h1 class="hero-title supertitle text-brown">
|
||||
{{ $configBandeau->data['bandeau_image_title']['value'] }}
|
||||
</h1>
|
||||
@if (!empty($configBandeau->data['bandeau_image_subtitle']['value']))
|
||||
<p class="hero-subtitle subtitle">{{ $configBandeau->data['bandeau_image_subtitle']['value'] }}</p>
|
||||
@endif
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@push('styles')
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue