Files
tsv08kulmbach-website/app/components/stadionzeitung-cards.php
fs c7b23b9f39 Archiv-Zeile: Titel größer und selbsterklärend
Titel lautet jetzt "Stadionzeitung zum Heimspiel gegen <Gegner>" statt nur
"Gegen <Gegner>". Damit ist die Zeile für sich verständlich, auch als Link-Text
für Screenreader. Das "zum" ist eingefügt, damit der Satz grammatisch trägt.

Größe von --fs-650 auf --fs-690, den Token für Karten-Überschriften (28px auf
32 bis 44px). Die alte Begründung für die kleinere Stufe war, dass lange
Gegner-Bezeichnungen in die 280px-Karte passen mussten — die Karte ist jetzt
eine Zeile über die volle Breite, der Grund ist weg. Nach unten bleibt
--fs-650 die harte Grenze für Coolvetica in Versalien.

Geprüft bei 1280px (Titel auf einer Zeile, füllt die Zeile) und bei echten
390px (bricht auf zwei Zeilen, liest sich sauber).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NzeVVgMCrzCDJAKeLEdKr7
2026-07-31 18:32:32 +02:00

56 lines
3.0 KiB
PHP

<?php
declare(strict_types=1);
/**
* Ausgaben-Archiv der Stadionzeitung, ganze Karte verlinkt auf die Ausgabe.
* Props: $issues array aus data/stadionzeitung.json (bereits neueste zuerst).
* Leer → freundlicher Hinweis statt leerer Sektion (nie brechen).
*/
$issues = $issues ?? [];
?>
<section class="section stadionzeitung-cards">
<div class="container">
<h2 class="visually-hidden">Ausgaben der Stadionzeitung</h2>
<?php if ($issues === []): ?>
<p class="text-muted">Noch keine Ausgabe digital verfügbar — zur nächsten Heimspiel-Stadionzeitung schauen wir wieder vorbei.</p>
<?php else: ?>
<ul class="stadionzeitung-cards__grid">
<?php foreach ($issues as $issue): ?>
<li>
<a class="stadionzeitung-card" href="<?= e(url('stadionzeitung/' . $issue['slug'])) ?>">
<div class="stadionzeitung-card__media">
<?php $firstPage = $issue['images'][0] ?? null; ?>
<?php if ($firstPage !== null && ($firstPage['type'] ?? 'image') === 'live' && ($firstPage['page'] ?? '') === 'cover'): ?>
<?php /* Seit dem automatischen Cover (Phase 3) beginnt jede Ausgabe mit der
echten, live gerenderten Titelseite statt einem Canva-Bild — die
dient hier direkt als Karten-Vorschau, keine zweite Bildquelle. */ ?>
<?php component('stadionzeitung-cover', ['issue' => $issue]); ?>
<?php elseif ($firstPage !== null): ?>
<?php component('img', ['image' => $firstPage, 'sizes' => '(max-width: 600px) 100vw, 360px', 'class' => 'stadionzeitung-card__img']); ?>
<?php endif; ?>
</div>
<div class="stadionzeitung-card__body">
<h3 class="stadionzeitung-card__name">Stadionzeitung zum Heimspiel gegen <?= e($issue['opponent']) ?></h3>
<p class="stadionzeitung-card__meta">
<time datetime="<?= e($issue['date']) ?>"><?= e(german_date($issue['date'])) ?></time>
· <?= (int) $issue['pages'] ?> Seiten
</p>
<?php /* Coverzeile des Interviews als Teaser — dieselbe Quelle, die auch auf dem
Cover unter „Im Heft" steht. Sie füllt die breite Zeile mit echtem Inhalt
statt Leerfläche und sagt, warum man die Ausgabe öffnen sollte. Trägt eine
Ausgabe kein Interview, entfällt die Zeile (wie bei .veranstaltung-card__text). */
$kartenTeaser = trim((string) ($issue['interview']['teaser'] ?? '')); ?>
<?php if ($kartenTeaser !== ''): ?>
<p class="stadionzeitung-card__text"><?= e($kartenTeaser) ?></p>
<?php endif; ?>
<span class="stadionzeitung-card__cta">Ausgabe lesen <?= icon('arrow-right', 'stadionzeitung-card__arrow') ?></span>
</div>
</a>
</li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
</div>
</section>