Files
tsv08kulmbach-website/app/pages/turnen-trampolin.php

33 lines
1.1 KiB
PHP
Raw Normal View History

<?php
declare(strict_types=1);
/**
* Turnen Trampolinturnen. Inhalt: data/turnen.json (disciplines.trampolin).
* Struktur: Hero Gruppen/Trainingszeiten CTA.
*/
$slug = 'turnen/trampolin';
$d = json_load('turnen')['disciplines']['trampolin'];
$meta = [
'title' => 'Trampolinturnen in Kulmbach',
Stadionzeitung, Veranstaltungen, News-Artikel, Lightbox und Anzeigen-Verteilung Stadionzeitung: Live-Seiten (Tabellen, Ergebnisse, Vorschau, Termine, News, Kontakt, Historie, Sportheim, Partner, Momente, Impressum), automatisches Cover, Swipe-Viewer mit Vollbildmodus und die Druckfassung als Falt-Heft. Anzeigen kommen jetzt aus dem Bestand und werden gleichmäßig verteilt, nie mehr als zwei hintereinander (vorher vier Blöcke à fünf). Die Doppelseiten-Regel rechnet das Skript selbst, statt sie von Hand zu prüfen. Veranstaltungen: Bereich /veranstaltungen mit Detailseite pro Fest, Lebenszyklus über das Datum (Ankündigung vor dem Fest, Rückblick danach), Galerie mit Lightbox. veranstaltungen.json ist dritte Termin-Quelle, damit ein Fest nie doppelt gepflegt wird. News-Artikel als dritte dynamische Prefix-Route, gemeinsamer detail-head. Behobene Fehler: - Wappen-Kontexte setzten Zeilen-Layout auf .crest statt auf die Zeile; das Wappen wurde zum Grid, Vereinsname und Tore rutschten darunter zusammen (Ergebnis-Rückblick, Vorschau, Cover). - --header-h (60px) unterschätzt die Kopfleiste um 32px (Logo 72px + 20px Versatz): neues abgeleitetes --header-space, sonst klebten Zurück-Links unter dem Logo. - base_url in der Produktions-Config ohne www, während .htaccess auf www umleitet; preflight prüft das jetzt. - .lightbox brauchte display:none mit (0,2,0), sonst lag das Overlay offen. Neue Werkzeuge: bin/anzeige-add.php (Anzeigen-Bestand), bin/veranstaltung-bilder.php (Plakate und Galerien, Alt-Texte folgen der Quelldatei), bin/qr.php (Druck-QR mit Warnung, wenn base_url nicht auf die echte Domain zeigt). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NzeVVgMCrzCDJAKeLEdKr7
2026-07-31 14:55:27 +02:00
'description' => 'Sprünge, Schrauben und Salti auf dem Großtrampolin: Trampolinturnen beim TSV 08 Kulmbach in der Carl-von-Linde-Realschule. Zeiten und Kontakt im Überblick.',
'og_image' => 'img/pages/vereinsgelaende-1600.jpg',
'schema' => page_schema([
['name' => 'Startseite', 'slug' => ''],
['name' => 'Turnen', 'slug' => 'turnen'],
['name' => 'Trampolinturnen', 'slug' => $slug],
]),
];
component('hero', ['hero' => $d['hero']]);
component('group-schedule', [
Trampolin: Schnupper-Einladung, Hinweise bekommen zwei Tonlagen Info von Eva aus der Trampolin-Gruppe: neue Kinder können ab September (Schulbeginn) gerne schnuppern kommen. Die Info stand nirgends. Rot wäre dafür falsch gewesen. Die Farbe bekommt deshalb eine Bedeutung: --stop (gefüllt rot) heißt „geht nicht", --info (Glas-Fläche, Rot nur im Icon) heißt „geht". Eine Einladung in Alarmrot liest sich wie eine Absage, und wenn alles rot ist, stumpft Rot ab und der echte Wartelisten-Stopp bei „Tiger" und „Hühner" verliert seine Wirkung. --info ist ab jetzt der Default. Damit steht der Hinweis an drei Stellen, also greift die Bedingung aus dem letzten Commit („kommt ein dritter Ort dazu, gehören die gemeinsamen Eigenschaften in eine geteilte Klasse"): neu app/components/notice.php als einzige Render-Stelle statt dreimal dasselbe Markup. Die beiden bestehenden Klassen schrumpfen auf das, was sie wirklich beitragen — .turnen-dash__notice nur noch grid-area, .contact__notice nur noch die Formularbreite. Die tote .turnen-dash__notice-icon-Regel ist raus, der CSS-Abschnitt neu sortiert (notice als eigener Block hinter turnen-dash statt mitten hinein). Text, Tonlage und Icon stehen wie gehabt in data/turnen.json bei der Disziplin, nicht im Template. Kinderturnen trägt jetzt explizit notice_tone: stop, Trampolin nichts und ist damit neutral. Das Grid-Template für --notice + --single gab es schon, an beiden Breakpoints — die Trampolin-Seite hat eine Gruppe und wäre sonst auseinandergefallen. Gemessen bei 390px: kein Überlauf auf allen drei Seiten, Trampolin-Fläche rgba(0,0,0,0.22) (Glas), die beiden anderen #e20612. Zwölf Seiten geprüft, alle 200. preflight ohne neue Meldungen. OFFEN, mit Eva oder Tina zu klären: der zweite Satz („Schreib uns davor einfach kurz eine Nachricht") ist von mir, Eva hat ihn nicht gesagt. Wenn die Kinder einfach zum Training kommen dürfen, gehört er weg. Und die Einladung steht bisher nur auf /turnen/trampolin, nicht auf der Übersicht /turnen. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NzeVVgMCrzCDJAKeLEdKr7
2026-07-31 22:04:41 +02:00
'location' => $d['location'] ?? [],
'lead' => $d['lead'] ?? '',
'notice' => $d['notice'] ?? '',
'noticeTitle' => $d['notice_title'] ?? '',
'noticeTone' => $d['notice_tone'] ?? 'info',
'noticeIcon' => $d['notice_icon'] ?? 'info-circle',
'groups' => $d['groups'] ?? [],
Turn-Anmeldung als eigene FAQ-Frage, Knöpfe in FAQ-Antworten möglich Der Anmelde-Vorgang der Abteilung (erst Platz anfragen, dann Aufnahmeantrag) stand nirgends auf der Seite. Auf der alten Seite gab es dafür einen Block „ANMELDUNG" mit zwei Knöpfen. Erst als eigene Sektion unter den Beiträgen gebaut (cta-band), auf Wunsch von Felix wieder entfernt und stattdessen als eigene FAQ-Frage umgesetzt. Zwei Sektionen mit denselben Knöpfen auf einer Seite schwächen beide Stellen, und man weiß nicht mehr, welcher der richtige Weg ist. Deshalb ist auch overview.cta ganz aus data/turnen.json raus statt unbenutzt liegen zu bleiben — genau so ein toter Block hat heute schon einmal in die Irre geführt (die Notiz „NOCH unbenutzt" stand monatelang im Docblock von turnen.php). faq.php bekommt dafür ein optionales ctas-Feld pro Eintrag, gerendert über die bestehende cta-Komponente, also keine neue Knopf-Variante. .faq__actions bricht um, weil zwei Knöpfe auf einem schmalen Handy nicht nebeneinander passen. Die Antwort nennt beide Wege bewusst AUCH in Worten: faq_schema() liest nur q und a, Knöpfe landen nie im FAQPage-Schema. Stünde in der Antwort nur „so geht's" plus zwei Knöpfe, hätte Google eine Antwort ohne Ziel. Nachgeprüft: sechs Fragen im Schema, der neue Antworttext ist HTML- und Markup-frei. Gemessen bei 390px: kein Überlauf, Knöpfe 130x44 und 193x44 (Trefferfläche erfüllt). Die fünf Turn-Unterseiten hatten als einzige von 105 PHP-Dateien keinen Zeilenumbruch am Dateiende, das ist mitkorrigiert. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NzeVVgMCrzCDJAKeLEdKr7
2026-07-31 22:31:57 +02:00
]);