Markenlogos einbinden: Seitenkopf und alle Kacheln

Zulieferung dev/2026-08-28/markenlogos/ (CABINET und Rotpunkt als SVG, Februe
als PNG). Die Dateien liegen unter public/img/assets/marken/ und haengen als
`logo` an der jeweiligen Marke.

- Kopf der Markenseite: Logo anstelle des Schriftzugs, im <h1>, damit die
  Ueberschrift erhalten bleibt – den Text liefert das alt-Attribut. Ohne Logo
  erscheint weiterhin der Schriftzug.
- Logo zusaetzlich auf der Startseiten-Kachel, im Block auf /marken und in den
  „Weitere Marken“-Kacheln am Seitenfuss.
- Feste Box (Hoehe + Maximalbreite + object-contain) statt fester Hoehe: die
  Seitenverhaeltnisse gehen weit auseinander (Februe 2,3:1, Rotpunkt 1,2:1),
  mit reiner Hoehenangabe waere Februe doppelt so breit erschienen. Konvention
  aus der Sponsoring-Sektion.
- Februe-Logo auf seinen Inhalt beschnitten: im Original waren knapp drei
  Viertel der Flaeche leerer Rand, in einer Box haette es winzig gewirkt.
  53 KB → 15 KB.
- BrandLogoSeeder traegt die Logos auf bestehenden Installationen nach –
  CmsBrandSeeder ueberspringt vorhandene Marken. Setzt nur `logo` und nur bei
  leerem Feld, ein im Admin hochgeladenes Logo bleibt stehen.

Tests: 871 gruen (3215 Assertions), Pint sauber, alle Themes gebaut.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Kevin Adametz 2026-09-03 11:16:41 +00:00
parent 093e0ece51
commit c8899e2d7d
12 changed files with 282 additions and 13 deletions

View file

@ -0,0 +1,59 @@
<?php
namespace Database\Seeders;
use App\Models\CmsBrand;
use Illuminate\Database\Seeder;
/**
* Traegt die Markenlogos nach.
*
* Grundlage: dev/2026-08-28/markenlogos/ (Zulieferung vom 03.09.2026). Die Dateien liegen unter
* public/img/assets/marken/; das Februe-Logo ist dabei auf seinen Inhalt beschnitten – im
* Original war knapp drei Viertel der Flaeche leerer Rand, wodurch es neben den beiden SVGs
* winzig gewirkt haette.
*
* {@see CmsBrandSeeder} bringt dieselben Werte fuer frische Installationen mit, ueberspringt
* aber bereits angelegte Marken. Dieser Seeder fasst nur das Feld `logo` an und auch nur dann,
* wenn es leer ist – ein selbst hochgeladenes Logo bleibt also stehen. Mehrfaches Ausfuehren
* ist unbedenklich.
*
* php artisan db:seed --class=BrandLogoSeeder
*/
class BrandLogoSeeder extends Seeder
{
/** @var array<string, string> */
private const LOGOS = [
'cabinet' => 'marken/cabinet.svg',
'rotpunkt' => 'marken/rotpunkt.svg',
'februe' => 'marken/februe.png',
];
public function run(): void
{
$set = 0;
$kept = 0;
foreach (self::LOGOS as $slug => $logo) {
$brand = CmsBrand::query()->where('slug', $slug)->first();
if (! $brand) {
$this->command?->warn("Marke „{$slug}“ nicht gefunden – uebersprungen.");
continue;
}
if (trim((string) $brand->logo) !== '') {
$kept++;
continue;
}
$brand->logo = $logo;
$brand->save();
$set++;
}
$this->command?->info("Markenlogos gesetzt: {$set}, vorhandene behalten: {$kept}.");
}
}

View file

@ -8,9 +8,11 @@ use Illuminate\Database\Seeder;
/**
* Legt die drei Kernmarken an. Texte aus dev/2026-08-28/umsetzung-inhalte.md §5.
*
* Bestehende Marken werden nicht überschrieben – Marcel pflegt sie im Admin.
* Logos, Stimmungsbilder und Galerien fehlen als Zulieferung und bleiben leer;
* die Kacheln und Detailseiten zeigen so lange einen Platzhalter.
* Bestehende Marken werden nicht überschrieben – Marcel pflegt sie im Admin. Für bereits
* angelegte Marken setzt {@see BrandLogoSeeder} die Logos nach.
*
* Stimmungsbilder und Galerien fehlen als Zulieferung und bleiben leer; die Kacheln und
* Detailseiten zeigen so lange einen Platzhalter.
*/
class CmsBrandSeeder extends Seeder
{
@ -38,6 +40,7 @@ class CmsBrandSeeder extends Seeder
return [
[
'slug' => 'cabinet',
'logo' => 'marken/cabinet.svg',
'name' => ['de' => 'CABINET', 'en' => 'CABINET'],
'tagline' => ['de' => 'Einbauschränke nach Maß.', 'en' => 'Fitted wardrobes made to measure.'],
'teaser' => [
@ -72,6 +75,7 @@ Experience the possibilities in our Bielefeld showroom.',
],
[
'slug' => 'rotpunkt',
'logo' => 'marken/rotpunkt.svg',
'name' => ['de' => 'Rotpunkt Küchen', 'en' => 'Rotpunkt Küchen'],
'tagline' => ['de' => 'Küchen, die Haltung zeigen.', 'en' => 'Kitchens with character.'],
'teaser' => [
@ -106,6 +110,7 @@ Consultation and planning in our kitchen studio.',
],
[
'slug' => 'februe',
'logo' => 'marken/februe.png',
'name' => ['de' => 'Febrü', 'en' => 'Febrü'],
'tagline' => ['de' => 'Arbeiten, wo man gerne bleibt.', 'en' => 'Work where you like to stay.'],
'teaser' => [