b2in/database/seeders/HomeHeroTextSeeder.php
Kevin Adametz fcb10be120 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>
2026-10-08 14:00:15 +00:00

121 lines
4.7 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace Database\Seeders;
use FluxCms\Core\Models\CmsContent;
use FluxCms\Core\Services\CmsContentService;
use Illuminate\Database\Seeder;
/**
* Hero der Startseite (Abstimmung 01.10.2026, Briefing Marcel 24.09.2026 Punkte 3 und 5).
*
* Setzt im CMS-Eintrag home/hero die neue Überschrift „Räume aus einer Hand. Mit starken Marken
* und persönlichen Lösungen.“ und entfernt den zweiten Button „Termin anfragen“ (der feste
* Termin-Button unten rechts bleibt). Die Überschrift wird nur ersetzt, solange noch die alte
* „B2in Interior – Premium-Einrichtung …“ drinsteht – eine eigene Formulierung im CMS bleibt.
*
* Abstimmung 07.10.2026: Zeile „B2in Interior“ über der Überschrift (`eyebrow`, nur wenn noch
* keine gepflegt ist), Untertitel „Wir vereinen …“ (ersetzt nur den bisherigen) und das erste
* Slideshow-Bild trägt in der Karte „B2in Interior“ statt „Rotpunkt Küchen“.
* Mehrfaches Ausführen ist unbedenklich.
*
* php artisan db:seed --class=HomeHeroTextSeeder
*/
class HomeHeroTextSeeder extends Seeder
{
/** @var array<string, array{old: string, new: string}> */
public const TITLES = [
'de' => [
'old' => 'Premium-Einrichtung von starken Marken',
'new' => '<span class="text-secondary">Räume aus einer Hand.</span><br>Mit starken Marken und persönlichen Lösungen.',
],
'en' => [
'old' => 'Premium furnishing from strong brands',
'new' => '<span class="text-secondary">Spaces from a single source.</span><br>With strong brands and personal solutions.',
],
];
/** @var array<string, array{old: string, new: string}> */
public const SUBTITLES = [
'de' => [
'old' => 'Von der einzelnen Maßanfertigung bis zur vollständigen Ausstattung',
'new' => 'Wir vereinen CABINET, Rotpunkt Küchen, Febrü und ein Netzwerk regionaler Experten, um individuelle Interior-Lösungen für Ihr Zuhause oder Ihr Projekt zu realisieren.',
],
'en' => [
'old' => 'From a single bespoke piece to a complete fit-out',
'new' => 'We bring together CABINET, Rotpunkt Küchen, Febrü and a network of regional experts to create individual interior solutions for your home or your project.',
],
];
public const EYEBROW = 'B2in Interior';
public const FIRST_SLIDE_IMAGE = 'b2in/slideshow/rotpunkt-fenix-house.webp';
public const FIRST_SLIDE_LABEL = ['old' => 'Rotpunkt Küchen', 'new' => 'B2in Interior'];
public function run(): void
{
$row = CmsContent::query()->where('group', 'home')->where('key', 'hero')->first();
if (! $row) {
$this->command?->info('Hero: Sektion home/hero nicht im CMS – die Lang-Datei gilt.');
return;
}
$value = $row->getTranslations('value');
$changed = false;
foreach ($value as $locale => $content) {
if (! is_array($content)) {
continue;
}
$title = self::TITLES[$locale] ?? null;
if ($title && str_contains((string) ($content['title'] ?? ''), $title['old'])) {
$content['title'] = $title['new'];
$changed = true;
}
$subtitle = self::SUBTITLES[$locale] ?? null;
if ($subtitle && str_contains((string) ($content['subtitle'] ?? ''), $subtitle['old'])) {
$content['subtitle'] = $subtitle['new'];
$changed = true;
}
if (! filled($content['eyebrow'] ?? null)) {
$content['eyebrow'] = self::EYEBROW;
$changed = true;
}
foreach ((array) ($content['slides'] ?? []) as $index => $slide) {
if (is_array($slide) && ($slide['image'] ?? null) === self::FIRST_SLIDE_IMAGE
&& ($slide['label'] ?? null) === self::FIRST_SLIDE_LABEL['old']) {
$content['slides'][$index]['label'] = self::FIRST_SLIDE_LABEL['new'];
$changed = true;
}
}
if (array_key_exists('cta2_text', $content) || array_key_exists('cta2_link', $content)) {
unset($content['cta2_text'], $content['cta2_link']);
$changed = true;
}
$value[$locale] = $content;
}
if (! $changed) {
$this->command?->info('Hero: bereits aktuell, nichts geändert.');
return;
}
$row->value = $value;
$row->save();
app(CmsContentService::class)->clearCache('home');
$this->command?->info('Hero: Texte aktualisiert (Überschrift, Zeile darüber, Untertitel, erste Slide).');
}
}