- Hinweisleiste per B2IN_ANNOUNCEMENT_BAR ausgeblendet (Standard aus) - Hero: „Räume aus einer Hand.“ als neue Überschrift, zweiter Button entfernt - Projekttext mit zentralem deutschen Vertragspartner (Punkt statt Gedankenstrich) - Otterpohl als vierte Kernmarke: Text v2, Abschnitt „Montage“, Titelbild getauscht - Markenabschnitte: Absätze mit „- “ als Liste mit fetter Einleitung - Titelbilder und Galerien für CABINET, Rotpunkt, Febrü und Otterpohl (WebP) - Feedback 17.09. in den Markentexten, Demobilder entfernt, WhatsApp-Nummer - Palette „Modern“ fest ohne Schalter, Entwurf /entwurf mit Hero-Slideshow - Seeder-Liste fürs Deployment im Entwicklungsplan Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
79 lines
2.6 KiB
PHP
79 lines
2.6 KiB
PHP
<?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.
|
||
* 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.',
|
||
],
|
||
];
|
||
|
||
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;
|
||
}
|
||
|
||
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: Überschrift gesetzt, zweiter Button entfernt.');
|
||
}
|
||
}
|