Stadionzeitung: Galerie-Seite als Bento-Raster
Optionale Live-Seite hinter dem Ergebnis-Rückblick mit Fotos vom letzten Spiel. bin/stadionzeitung-add.php liest sie aus <ordner>/galerie/, Kopf und Alt-Texte sind Chat-Pflege und hängen an source. Preflight meldet fehlende Galerie-Dateien. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PCMNXcfkM9RcaVjqoJjRsz
This commit is contained in:
50
app/components/stadionzeitung-galerie.php
Normal file
50
app/components/stadionzeitung-galerie.php
Normal file
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* Galerie-Seite der Stadionzeitung (Live-Seite, optional) — Fotos vom letzten
|
||||
* Spiel als Bento-Raster: ein großes Aufmacherfoto, die übrigen in kleineren
|
||||
* Kacheln darum. Das Raster füllt die ganze Blattfläche unter dem Kopf, die
|
||||
* Fotos werden per object-fit auf ihre Kachel beschnitten.
|
||||
*
|
||||
* Props: $issue Eintrag aus data/stadionzeitung.json. Gelesen wird das Feld
|
||||
* `galerie`: `kicker`, `heading`, `text?` sind Chat-Pflege, `bilder[]`
|
||||
* (base/widths/alt/source) schreibt bin/stadionzeitung-add.php aus
|
||||
* <ordner>/galerie/. Alt-Texte kommen aus dem Chat und hängen an `source`.
|
||||
*
|
||||
* Die Bilder liegen im Ausgaben-Ordner und werden von keinem Sync angefasst,
|
||||
* deshalb braucht die Seite keinen Snapshot.
|
||||
*/
|
||||
$galerie = is_array($issue['galerie'] ?? null) ? $issue['galerie'] : [];
|
||||
$bilder = array_slice(array_values(array_filter(
|
||||
$galerie['bilder'] ?? [],
|
||||
static fn ($b): bool => is_array($b) && !empty($b['base']) && !empty($b['widths'])
|
||||
)), 0, 7);
|
||||
$kicker = trim((string) ($galerie['kicker'] ?? 'Rückblick'));
|
||||
$heading = trim((string) ($galerie['heading'] ?? 'Fotos vom letzten Spiel'));
|
||||
$text = trim((string) ($galerie['text'] ?? ''));
|
||||
?>
|
||||
<div class="stadionzeitung-galerie">
|
||||
<header class="stadionzeitung-page__head">
|
||||
<?php if ($kicker !== ''): ?>
|
||||
<p class="stadionzeitung-page__kicker"><?= e($kicker) ?></p>
|
||||
<?php endif; ?>
|
||||
<h2 class="stadionzeitung-page__heading"><?= e($heading) ?></h2>
|
||||
<?php if ($text !== ''): ?>
|
||||
<p class="stadionzeitung-galerie__text"><?= e($text) ?></p>
|
||||
<?php endif; ?>
|
||||
</header>
|
||||
<?php if ($bilder !== []): ?>
|
||||
<div class="stadionzeitung-galerie__bento stadionzeitung-galerie__bento--n<?= count($bilder) ?>">
|
||||
<?php foreach ($bilder as $i => $bild): ?>
|
||||
<?php component('img', [
|
||||
'image' => $bild,
|
||||
// Aufmacher gut zwei Drittel der Seitenbreite, die Kacheln ein Drittel.
|
||||
'sizes' => $i === 0 ? '(min-width: 520px) 340px, 70vw' : '(min-width: 520px) 240px, 50vw',
|
||||
'class' => 'stadionzeitung-galerie__foto',
|
||||
]); ?>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
Reference in New Issue
Block a user