Startseite und Heroes - Hero-Slideshow (11 Motive inkl. Febrü) mit Infokarte, Laufzeit-Linie, größeren Klickflächen, Goldrahmen und mobiler Karte unter dem Bild; Zeile über der Überschrift, neue Vertrauenspunkte - Hero-Stil auf Marken, Über uns und Kontakt übertragen, Breadcrumb entfernt - Gründer-Leiste, Vision-Box auf Ocker, Showroom-Display in Box mit „Größer ansehen“/Vollbild - Akzentfarbe #a8741f, größere Serif-Überschriften in der Interior-Welt - Marken: Bildpause mit Zitat; Vereine aktualisiert und verlinkt Inhalte - Lektorat aller angezeigten Texte, /about-Korrekturen, Rechtstexte (DDG, TDDDG, Hosting Hetzner) - Ablauf Maßanfertigung überall einheitlich, Magazin-Beitrag neu, alte Beiträge offline, deutsches Datum/Lesezeit, FAQ Projektausstattung, Otterpohl - Referenzen-Seite per CMS-Schalter ausblendbar CMS und Technik - Tote Sektionen, Felder, Seiten und Komponenten entfernt und archiviert (dev/2026-08-28/archiv-*) - Entwurf /entwurf, Farb-Schalter und /welcome entfernt; Test-Routen nur noch lokal - Seitenbaum-Beschreibungen geprüft, fehlende CMS-Felder ergänzt, Markenliste aus „Kernmarken“ - Admin-Bildvorschauen repariert, verwendete Bilder in die Mediathek übernommen - Seeder für das Deployment siehe dev/2026-08-28/entwicklungsplan.md Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
89 lines
3 KiB
PHP
89 lines
3 KiB
PHP
<?php
|
||
|
||
namespace Database\Seeders;
|
||
|
||
use FluxCms\Core\Models\CmsContent;
|
||
use FluxCms\Core\Services\CmsContentService;
|
||
use Illuminate\Database\Seeder;
|
||
|
||
/**
|
||
* Slideshow im Hero der Startseite (Abstimmung 07.10.2026).
|
||
*
|
||
* Trägt die neun Bilder aus dev/2026-08-28/images/slideshow (als WebP unter
|
||
* public/img/assets/b2in/slideshow/) samt Wechselintervall in den CMS-Eintrag home/hero ein –
|
||
* je Sprache aus resources/lang/{de,en}/b2in.php. Steht dort schon eine Liste `slides`, bleibt sie,
|
||
* wie sie gepflegt ist – nur fehlende Texte für die Infokarte (`caption`) kommen bei den gelieferten
|
||
* Bildern dazu. Mehrfaches Ausführen ist unbedenklich.
|
||
*
|
||
* php artisan db:seed --class=HomeHeroSlidesSeeder
|
||
*/
|
||
class HomeHeroSlidesSeeder extends Seeder
|
||
{
|
||
public function run(): void
|
||
{
|
||
$row = CmsContent::query()->where('group', 'home')->where('key', 'hero')->first();
|
||
|
||
if (! $row) {
|
||
$this->command?->info('Hero-Slideshow: home/hero nicht im CMS – die Lang-Datei gilt.');
|
||
|
||
return;
|
||
}
|
||
|
||
$value = $row->getTranslations('value');
|
||
$changed = false;
|
||
|
||
foreach ($value as $locale => $content) {
|
||
$defaults = trans('b2in.themes.b2in.hero', [], $locale);
|
||
|
||
if (! is_array($content) || ! is_array($defaults) || ! is_array($defaults['slides'] ?? null)) {
|
||
continue;
|
||
}
|
||
|
||
if (! array_key_exists('slides', $content)) {
|
||
$value[$locale] = $content + ['interval' => $defaults['interval'] ?? 7, 'slides' => $defaults['slides']];
|
||
$changed = true;
|
||
|
||
continue;
|
||
}
|
||
|
||
$withCaptions = $this->addMissingCaptions((array) $content['slides'], $defaults['slides']);
|
||
|
||
if ($withCaptions !== $content['slides']) {
|
||
$value[$locale]['slides'] = $withCaptions;
|
||
$changed = true;
|
||
}
|
||
}
|
||
|
||
if (! $changed) {
|
||
$this->command?->info('Hero-Slideshow: Slides bereits gepflegt, nichts geändert.');
|
||
|
||
return;
|
||
}
|
||
|
||
$row->value = $value;
|
||
$row->save();
|
||
app(CmsContentService::class)->clearCache('home');
|
||
|
||
$this->command?->info('Hero-Slideshow: Bilder bzw. Texte der Infokarte eingetragen.');
|
||
}
|
||
|
||
/**
|
||
* Ergänzt `caption` bei Slides, die eines der gelieferten Bilder zeigen und noch keinen Text haben.
|
||
*
|
||
* @param array<int, mixed> $slides
|
||
* @param array<int, array<string, mixed>> $defaults
|
||
* @return array<int, mixed>
|
||
*/
|
||
private function addMissingCaptions(array $slides, array $defaults): array
|
||
{
|
||
$captions = array_column($defaults, 'caption', 'image');
|
||
|
||
return array_map(function ($slide) use ($captions) {
|
||
if (! is_array($slide) || array_key_exists('caption', $slide) || ! isset($captions[$slide['image'] ?? ''])) {
|
||
return $slide;
|
||
}
|
||
|
||
return $slide + ['caption' => $captions[$slide['image']]];
|
||
}, $slides);
|
||
}
|
||
}
|