b2in/database/seeders/PageHeroEyebrowSeeder.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

95 lines
3.7 KiB
PHP
Raw Permalink 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;
/**
* Zeile über der Hero-Überschrift (`eyebrow`) auf Marken, Über uns und Kontakt (Abstimmung
* 07.10.2026, wie auf der Startseite). Ergänzt sie in den CMS-Einträgen aus der Lang-Datei,
* nur wenn dort noch keine gepflegt ist – oder noch der erste Vorschlag „Unsere Marken“ drinsteht
* (seit 07.10. auch auf Marken „B2in Interior“). Auf Über uns fällt das vorangestellte
* „Über B2in:“ aus der Überschrift, das steht jetzt in der Zeile darüber.
* Fehlt ein Eintrag im CMS, gilt ohnehin die Lang-Datei. Mehrfaches Ausführen ist unbedenklich.
*
* php artisan db:seed --class=PageHeroEyebrowSeeder
*/
class PageHeroEyebrowSeeder extends Seeder
{
/** @var array<string, array{group: string, key: string, lang: string, path: list<string>}> */
public const SECTIONS = [
'marken' => ['group' => 'marken', 'key' => 'hero', 'lang' => 'marken_hero', 'path' => []],
'about' => ['group' => 'about', 'key' => 'hero', 'lang' => 'about_hero', 'path' => []],
'contact' => ['group' => 'contact', 'key' => 'contact_form', 'lang' => 'contact_form', 'path' => ['hero']],
];
/** @var list<string> Frühere Vorschläge, die durch den Text der Lang-Datei ersetzt werden */
public const FORMER_EYEBROWS = ['Unsere Marken', 'Our brands'];
/** @var array<string, list<string>> Abschnitt → Präfixe, die aus der Überschrift fallen */
public const TITLE_PREFIXES = [
'about' => [
'<span class="text-secondary">Über B2in:</span> ',
'<span class="text-secondary">About B2in:</span> ',
],
];
public function run(): void
{
$updated = [];
foreach (self::SECTIONS as $name => $section) {
$row = CmsContent::query()->where('group', $section['group'])->where('key', $section['key'])->first();
if (! $row) {
continue;
}
$value = $row->getTranslations('value');
$changed = false;
foreach ($value as $locale => $content) {
if (! is_array($content)) {
continue;
}
$langPath = implode('.', ['b2in.themes.b2in', $section['lang'], ...$section['path'], 'eyebrow']);
$eyebrow = trans($langPath, [], $locale);
$fieldPath = implode('.', [...$section['path'], 'eyebrow']);
$current = data_get($content, $fieldPath);
if ($eyebrow !== $langPath && $current !== $eyebrow
&& (! filled($current) || in_array($current, self::FORMER_EYEBROWS, true))) {
data_set($content, $fieldPath, $eyebrow);
$changed = true;
}
foreach (self::TITLE_PREFIXES[$name] ?? [] as $prefix) {
$titlePath = implode('.', [...$section['path'], 'title']);
$title = (string) data_get($content, $titlePath, '');
if (str_starts_with($title, $prefix)) {
data_set($content, $titlePath, substr($title, strlen($prefix)));
$changed = true;
}
}
$value[$locale] = $content;
}
if ($changed) {
$row->value = $value;
$row->save();
app(CmsContentService::class)->clearCache($section['group']);
$updated[] = $name;
}
}
$this->command?->info($updated === []
? 'Hero-Zeilen: bereits aktuell, nichts geändert.'
: 'Hero-Zeilen ergänzt: '.implode(', ', $updated).'.');
}
}