Interior-Feinschliff: Hero-Slideshow, Lektorat, Rechtstexte, Aufräumen und Korrekturen 08.10.
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>
This commit is contained in:
parent
4b07bbdcae
commit
fcb10be120
406 changed files with 22549 additions and 3798 deletions
89
database/seeders/HomeHeroSlidesSeeder.php
Normal file
89
database/seeders/HomeHeroSlidesSeeder.php
Normal file
|
|
@ -0,0 +1,89 @@
|
|||
<?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);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue