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:
Kevin Adametz 2026-10-08 14:00:15 +00:00
parent 4b07bbdcae
commit fcb10be120
406 changed files with 22549 additions and 3798 deletions

View file

@ -0,0 +1,74 @@
<?php
namespace Database\Seeders;
use FluxCms\Core\Models\CmsContent;
use FluxCms\Core\Services\CmsContentService;
use Illuminate\Database\Seeder;
/**
* Vertrauenspunkte unten im Hero (Abstimmung 07.10.2026): Die Startseite bekommt „Deutsche
* Manufakturen“, „Planung bis Montage“ und „Zwei Showrooms in Bielefeld“ – ersetzt werden nur die
* bisherigen Standardpunkte. Der Hero auf /marken bekommt „Maßarbeit vom Handwerk“, „Werk und
* Ausstellung erlebbar“ und „Küche, Einbau, Arbeitsplatz“, wenn dort noch keine gepflegt sind.
* Die Texte kommen aus der Lang-Datei (`stats`). Mehrfaches Ausführen ist unbedenklich.
*
* php artisan db:seed --class=HeroTrustItemsSeeder
*/
class HeroTrustItemsSeeder extends Seeder
{
/** @var array<string, list<string>> Bisherige Standardpunkte der Startseite je Sprache */
public const FORMER_HOME_STATS = [
'de' => ['Premium-Marken', 'Maßgefertigte Lösungen', 'Persönliche Beratung'],
'en' => ['Premium brands', 'Bespoke solutions', 'Personal consulting'],
];
public function run(): void
{
$updated = array_filter([
$this->apply('home', 'hero', 'hero', fn (mixed $current, string $locale) => $current === (self::FORMER_HOME_STATS[$locale] ?? null)),
$this->apply('marken', 'hero', 'marken_hero', fn (mixed $current) => ! filled($current)),
]);
$this->command?->info($updated === []
? 'Hero-Vertrauenspunkte: bereits aktuell, nichts geändert.'
: 'Hero-Vertrauenspunkte gesetzt: '.implode(', ', $updated).'.');
}
/**
* @param callable(mixed, string): bool $shouldReplace
*/
private function apply(string $group, string $key, string $langSection, callable $shouldReplace): ?string
{
$row = CmsContent::query()->where('group', $group)->where('key', $key)->first();
if (! $row) {
return null;
}
$value = $row->getTranslations('value');
$changed = false;
foreach ($value as $locale => $content) {
$stats = trans("b2in.themes.b2in.{$langSection}.stats", [], $locale);
if (! is_array($content) || ! is_array($stats) || ! $shouldReplace($content['stats'] ?? null, $locale)) {
continue;
}
$content['stats'] = $stats;
$value[$locale] = $content;
$changed = true;
}
if (! $changed) {
return null;
}
$row->value = $value;
$row->save();
app(CmsContentService::class)->clearCache($group);
return "{$group}/{$key}";
}
}