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>
74 lines
2.6 KiB
PHP
74 lines
2.6 KiB
PHP
<?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}";
|
||
}
|
||
}
|