Stadionzeitung gegen TDC Lindau 2 mit Jugendbeitrag vorbereiten

This commit is contained in:
2026-10-24 11:52:57 +02:00
parent bd8f1dd129
commit fd305673aa
37 changed files with 790 additions and 2 deletions

View File

@@ -161,6 +161,7 @@ $rueckseite = $findOne('rueckseite');
$spieler = $findOne('spieler');
$verfasser = $findOne('verfasser');
$rueckblickFoto = $findOne('rueckblick');
$beitragFoto = $findOne('beitrag');
$galerieQuellen = $findAll('galerie');
// Anzeigen kommen NICHT mehr aus dem Ablieferordner, sondern aus dem dauerhaften
// Bestand (data/anzeigen.json, gepflegt über bin/anzeige-add.php). Ein noch
@@ -201,6 +202,16 @@ foreach ($existing['issues'] ?? [] as $entry) {
$oldVorwort = $oldIssue['vorwort'] ?? null;
// Interview wie das Vorwort chat-gepflegt — überlebt erneute Läufe ebenso.
$oldInterview = $oldIssue['interview'] ?? null;
$beitrag = $oldIssue['beitrag'] ?? null;
if (is_array($beitrag) && $beitragFoto === null) {
$fail('Redaktioneller Beitrag vorhanden, aber beitrag.* fehlt im Ablieferordner.');
}
if (is_array($beitrag)) {
$beitragLink = trim((string) ($beitrag['source_url'] ?? ''));
if (!filter_var($beitragLink, FILTER_VALIDATE_URL) || parse_url($beitragLink, PHP_URL_SCHEME) !== 'https') {
$fail('Beitrag: source_url muss eine gültige HTTPS-Adresse sein.');
}
}
// Aufruf-Seite (z. B. Sportfest-Helferaufruf) ebenso chat-gepflegt.
$oldAufruf = $oldIssue['aufruf'] ?? null;
// Sportfest-Ausgabe: Slug-Verweis auf data/veranstaltungen.json (Programm,
@@ -417,6 +428,10 @@ try {
if ($oldInterview !== null) {
$aufschlag[] = $live('interview');
}
if (is_array($beitrag)) {
$beitrag['image'] = $bild($beitragFoto, 'beitrag', (string) ($beitrag['image']['alt'] ?? $beitrag['heading'] ?? 'Vereinsbeitrag'));
$aufschlag[] = $live('beitrag');
}
// Aufruf-Seite (Helferaufruf o. Ä.) reiht sich in denselben anzeigenfreien
// Aufschlag ein, direkt hinter Vorwort/Interview — ein redaktioneller
// Einstieg ohne Werbung dazwischen (chat-gepflegtes `aufruf`-Feld).
@@ -761,6 +776,12 @@ foreach (['mitmachen', 'news', 'termine', 'matchcenter', 'mitglied-werden', 'his
// (qr-aufruf.png) — der wird bei jedem Lauf ohnehin neu befüllt. club_url()
// wie überall, damit der gedruckte Code auf die echte Domain zeigt.
$aufrufLink = trim((string) ($oldAufruf['link'] ?? ''));
$beitragLink = trim((string) ($beitrag['source_url'] ?? ''));
if ($beitragLink !== '') {
if (!generate_qr_png($beitragLink, "{$destDir}/qr-beitrag.png")) {
$fail('QR-Code für den redaktionellen Beitrag konnte nicht erzeugt werden.');
}
}
if ($aufrufLink !== '') {
if (generate_qr_png(club_url($aufrufLink), "{$destDir}/qr-aufruf.png")) {
$log("QR-Code für die Aufruf-Seite (/{$aufrufLink}) erzeugt.");
@@ -838,6 +859,7 @@ $issues[] = [
'qr_image' => $qrImage,
'vorwort' => $oldVorwort,
'interview' => $oldInterview,
'beitrag' => $beitrag,
'aufruf' => $oldAufruf,
'veranstaltung' => $oldVeranstaltung,
'cover' => $oldCover,