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

47 lines
2.0 KiB
PHP
Raw Permalink Normal View History

<?php
declare(strict_types=1);
/**
* Turnen Wettkampfturnen. Inhalt: data/turnen.json (disciplines.wettkampfturnen).
Flamingos zum Wettkampfturnen, Inhalte gegen die alte Seite abgeglichen Die Flamingos sind organisatorisch vom Kinderturnen zum Wettkampfturnen gewechselt. Felix hat dazu die Fassung geschickt, die die Turnabteilung selbst auf der alten Seite gepflegt hatte — dabei kamen sieben Abweichungen heraus, alle korrigiert: - Die zweite Gruppe heißt "Leistungsturnen", nicht "Wettkampfturnen" (so hieß bei uns die Gruppe wie die Disziplin). - Reihenfolge: Flamingos zuerst, Leistungsturnen danach. - Den Flamingos fehlte eine Trainingszeit: Montag gibt es ZWEI Blöcke (18:00–19:00 und 19:00–20:00), wir hatten nur den ersten. - Ansprechpersonen sind pro Gruppe verschieden (Flamingos: Theresa Diener, Leistungsturnen: Franziska Trotzke). Dafür ist `contact` neu an einer Gruppe. Die Kontakt-Kachel oben kann nur EINE Person nennen und wäre für die andere Gruppe falsch — deshalb ist `lead` bei dieser Disziplin jetzt leer, die Kachel trägt nur noch die Abteilungs-Mail. So war es auf der alten Seite auch: dort gab es keine Ansprechperson für die Disziplin, nur je Gruppe. - Theresa Diener steht im Trainerteam vorn und ohne Stern (bei uns hinten). - Intro, Trainingsinhalte, Wettkämpfe und der Hinweis waren gekürzt; jetzt im Wortlaut der Abteilung. Den Gedankenstrich in "(Kür modifiziert – Leistungsklasse 3)" ersetzt ein Komma (Sprache & Ton). - Die Fußnote sagte "* So im Trainingsplan der Abteilung gekennzeichnet" — eine Verlegenheitsformulierung, weil wir die Bedeutung nicht kannten. Die alte Seite schreibt "* = ÜBUNGSLEITER", also jetzt "* Übungsleiterinnen und Übungsleiter" (Paarform, Haus-Stil). `level` bleibt "Turnen · fortgeschritten" ohne "Alter nach Absprache" — das hatte Felix am 31.07.2026 ausdrücklich aus dem Chip genommen. Zwei Folgen, die sonst still kaputtgegangen wären: die Seite hatte eine einzige Gruppe ohne Beschreibung und lief damit im Einzelgruppen-Layout. Mit zwei Gruppen, davon eine mit Beschreibung, rendert group-schedule eine Tab-Leiste — die braucht group-tabs.js, das die Seite nicht lud (tote Tab-Knöpfe). Und drei Flamingos-Trainerinnen tragen ein Sternchen, die erklärende Fußnote wurde auf dieser Seite nicht übergeben (drei unerklärte Sterne). Geprüft: Tabs "Flamingos" und "Leistungsturnen", Skript geladen, Fußnote da, Flamingos auf /turnen/eltern-kind-turnen nicht mehr erwähnt, kein Überlauf bei 390px, alle sechs Turn-Seiten 200. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NzeVVgMCrzCDJAKeLEdKr7
2026-07-31 22:40:25 +02:00
* Struktur: Hero Gruppen/Trainingszeiten.
*
Wettkampfturnen: Karten offen untereinander statt hinter Tabs Bei zwei Gruppen verstecken Tabs mehr Inhalt als sie ordnen, und die offene Kartenreihe hält den Bento-Eindruck der Seite (Entscheidung Felix). Das Kinderturnen bleibt bei Tabs, dort sind es drei textreiche Gruppen — die Flamingos-Karte allein ist am Handy 2142px hoch. .group-list--stacked lag vollständig im CSS, wurde aber von KEINEM PHP ausgegeben: totes CSS aus der Zeit vor den Tabs, das heute morgen sogar noch meine minmax(0, …)-Korrektur mitbekommen hat, ohne dass es jemand sehen konnte. Jetzt ist es lebendig. Dritter toter Rest heute: "layout": "blocks" in data/turnen.json las ebenfalls niemand, ist raus. Der Karteninhalt steht dafür jetzt einmal statt zweimal. Er wird in zwei Fassungen gebraucht (Tab-Panel mit role/aria und gestapelt ohne) und ist deshalb eine Closure geworden — eine zweite Kopie wäre die Stelle, an der beide in einem halben Jahr auseinanderlaufen. Die Überschrift ist visually-hidden, nicht entfernt: sonst hätte die Sektion keinen zugänglichen Namen und die Überschriften-Gliederung eine Lücke. Dasselbe Muster wie $title_hidden in team-cards. Damit braucht die Seite auch kein group-tabs.js mehr, das ich zwei Commits vorher erst dazugeschrieben hatte. Zwei Nachbesserungen, beide gemessen: - Die versteckte Überschrift hinterließ ein Loch. Zwischen Dashboard und erster Karte standen 160px (80 unten von der einen Sektion, 80 oben von der anderen), in denen nur nackte Hintergrund-Textur zu sehen war — vorher füllte die Überschrift diesen Raum. .group-list-section--tight nimmt das obere Padding weg, jetzt 80px. - Die gestapelten Karten hatten feste 40px Innenabstand; auf --pad-card-lg umgestellt, dieselbe Korrektur wie heute morgen beim Tab-Panel. Am Desktop unverändert 40px, am Handy 28px. Nicht behoben, weil kein Fehler: die Hintergrund-Textur wirkt in leeren Flächen weich. Sie ist 1920x2545 groß und wird bei 1478px Fensterbreite auf Faktor 0,77 VERKLEINERT, ist also nicht unscharf gerechnet. Sichtbar wurde sie durch den Leerraum plus background-attachment: fixed, das sie beim Scrollen stehen lässt. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NzeVVgMCrzCDJAKeLEdKr7
2026-07-31 22:56:21 +02:00
* Zwei Gruppen: die Flamingos, die am 31.07.2026 vom Kinderturnen hierher gezogen sind,
* und das Leistungsturnen. Dadurch läuft die Seite nicht mehr im Einzelgruppen-Layout
* (Trainingszeiten als Kachel im Dashboard), sondern zeigt die Gruppen darunter als
* offene Kartenreihe (layout => 'stacked') deshalb die Sternchen-Fußnote.
*/
$slug = 'turnen/wettkampfturnen';
Flamingos zum Wettkampfturnen, Inhalte gegen die alte Seite abgeglichen Die Flamingos sind organisatorisch vom Kinderturnen zum Wettkampfturnen gewechselt. Felix hat dazu die Fassung geschickt, die die Turnabteilung selbst auf der alten Seite gepflegt hatte — dabei kamen sieben Abweichungen heraus, alle korrigiert: - Die zweite Gruppe heißt "Leistungsturnen", nicht "Wettkampfturnen" (so hieß bei uns die Gruppe wie die Disziplin). - Reihenfolge: Flamingos zuerst, Leistungsturnen danach. - Den Flamingos fehlte eine Trainingszeit: Montag gibt es ZWEI Blöcke (18:00–19:00 und 19:00–20:00), wir hatten nur den ersten. - Ansprechpersonen sind pro Gruppe verschieden (Flamingos: Theresa Diener, Leistungsturnen: Franziska Trotzke). Dafür ist `contact` neu an einer Gruppe. Die Kontakt-Kachel oben kann nur EINE Person nennen und wäre für die andere Gruppe falsch — deshalb ist `lead` bei dieser Disziplin jetzt leer, die Kachel trägt nur noch die Abteilungs-Mail. So war es auf der alten Seite auch: dort gab es keine Ansprechperson für die Disziplin, nur je Gruppe. - Theresa Diener steht im Trainerteam vorn und ohne Stern (bei uns hinten). - Intro, Trainingsinhalte, Wettkämpfe und der Hinweis waren gekürzt; jetzt im Wortlaut der Abteilung. Den Gedankenstrich in "(Kür modifiziert – Leistungsklasse 3)" ersetzt ein Komma (Sprache & Ton). - Die Fußnote sagte "* So im Trainingsplan der Abteilung gekennzeichnet" — eine Verlegenheitsformulierung, weil wir die Bedeutung nicht kannten. Die alte Seite schreibt "* = ÜBUNGSLEITER", also jetzt "* Übungsleiterinnen und Übungsleiter" (Paarform, Haus-Stil). `level` bleibt "Turnen · fortgeschritten" ohne "Alter nach Absprache" — das hatte Felix am 31.07.2026 ausdrücklich aus dem Chip genommen. Zwei Folgen, die sonst still kaputtgegangen wären: die Seite hatte eine einzige Gruppe ohne Beschreibung und lief damit im Einzelgruppen-Layout. Mit zwei Gruppen, davon eine mit Beschreibung, rendert group-schedule eine Tab-Leiste — die braucht group-tabs.js, das die Seite nicht lud (tote Tab-Knöpfe). Und drei Flamingos-Trainerinnen tragen ein Sternchen, die erklärende Fußnote wurde auf dieser Seite nicht übergeben (drei unerklärte Sterne). Geprüft: Tabs "Flamingos" und "Leistungsturnen", Skript geladen, Fußnote da, Flamingos auf /turnen/eltern-kind-turnen nicht mehr erwähnt, kein Überlauf bei 390px, alle sechs Turn-Seiten 200. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NzeVVgMCrzCDJAKeLEdKr7
2026-07-31 22:40:25 +02:00
$data = json_load('turnen');
$d = $data['disciplines']['wettkampfturnen'];
$meta = [
'title' => 'Wettkampfturnen 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' => 'Leistungsorientiertes Gerätturnen mit Training und Wettkämpfen: Wettkampfturnen beim TSV 08 Kulmbach im Mäximum Gym. Trainingszeiten und Kontakt im Überblick.',
'og_image' => 'img/pages/vereinsgelaende-1600.jpg',
'schema' => page_schema([
['name' => 'Startseite', 'slug' => ''],
['name' => 'Turnen', 'slug' => 'turnen'],
['name' => 'Wettkampfturnen', 'slug' => $slug],
]),
];
component('hero', ['hero' => $d['hero']]);
component('group-schedule', [
'location' => $d['location'] ?? [],
'lead' => $d['lead'] ?? '',
'groups' => $d['groups'] ?? [],
Wettkampfturnen: Karten offen untereinander statt hinter Tabs Bei zwei Gruppen verstecken Tabs mehr Inhalt als sie ordnen, und die offene Kartenreihe hält den Bento-Eindruck der Seite (Entscheidung Felix). Das Kinderturnen bleibt bei Tabs, dort sind es drei textreiche Gruppen — die Flamingos-Karte allein ist am Handy 2142px hoch. .group-list--stacked lag vollständig im CSS, wurde aber von KEINEM PHP ausgegeben: totes CSS aus der Zeit vor den Tabs, das heute morgen sogar noch meine minmax(0, …)-Korrektur mitbekommen hat, ohne dass es jemand sehen konnte. Jetzt ist es lebendig. Dritter toter Rest heute: "layout": "blocks" in data/turnen.json las ebenfalls niemand, ist raus. Der Karteninhalt steht dafür jetzt einmal statt zweimal. Er wird in zwei Fassungen gebraucht (Tab-Panel mit role/aria und gestapelt ohne) und ist deshalb eine Closure geworden — eine zweite Kopie wäre die Stelle, an der beide in einem halben Jahr auseinanderlaufen. Die Überschrift ist visually-hidden, nicht entfernt: sonst hätte die Sektion keinen zugänglichen Namen und die Überschriften-Gliederung eine Lücke. Dasselbe Muster wie $title_hidden in team-cards. Damit braucht die Seite auch kein group-tabs.js mehr, das ich zwei Commits vorher erst dazugeschrieben hatte. Zwei Nachbesserungen, beide gemessen: - Die versteckte Überschrift hinterließ ein Loch. Zwischen Dashboard und erster Karte standen 160px (80 unten von der einen Sektion, 80 oben von der anderen), in denen nur nackte Hintergrund-Textur zu sehen war — vorher füllte die Überschrift diesen Raum. .group-list-section--tight nimmt das obere Padding weg, jetzt 80px. - Die gestapelten Karten hatten feste 40px Innenabstand; auf --pad-card-lg umgestellt, dieselbe Korrektur wie heute morgen beim Tab-Panel. Am Desktop unverändert 40px, am Handy 28px. Nicht behoben, weil kein Fehler: die Hintergrund-Textur wirkt in leeren Flächen weich. Sie ist 1920x2545 groß und wird bei 1478px Fensterbreite auf Faktor 0,77 VERKLEINERT, ist also nicht unscharf gerechnet. Sichtbar wurde sie durch den Leerraum plus background-attachment: fixed, das sie beim Scrollen stehen lässt. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NzeVVgMCrzCDJAKeLEdKr7
2026-07-31 22:56:21 +02:00
// Zwei Gruppen, beide offen untereinander statt hinter Tabs: bei so wenigen
// Gruppen verstecken Tabs mehr Inhalt als sie ordnen, und die offene Kartenreihe
// hält den Bento-Eindruck der Seite. Damit braucht die Seite auch kein
// group-tabs.js mehr. Das Kinderturnen bleibt bei Tabs, dort sind es drei
// textreiche Gruppen.
'layout' => 'stacked',
// Überschrift „Unsere Gruppen" nur für Screenreader: die Karten erklären sich
// selbst, und ohne die Zeile bleibt der Bento-Fluss ruhiger.
'groupsTitleHidden' => true,
Flamingos zum Wettkampfturnen, Inhalte gegen die alte Seite abgeglichen Die Flamingos sind organisatorisch vom Kinderturnen zum Wettkampfturnen gewechselt. Felix hat dazu die Fassung geschickt, die die Turnabteilung selbst auf der alten Seite gepflegt hatte — dabei kamen sieben Abweichungen heraus, alle korrigiert: - Die zweite Gruppe heißt "Leistungsturnen", nicht "Wettkampfturnen" (so hieß bei uns die Gruppe wie die Disziplin). - Reihenfolge: Flamingos zuerst, Leistungsturnen danach. - Den Flamingos fehlte eine Trainingszeit: Montag gibt es ZWEI Blöcke (18:00–19:00 und 19:00–20:00), wir hatten nur den ersten. - Ansprechpersonen sind pro Gruppe verschieden (Flamingos: Theresa Diener, Leistungsturnen: Franziska Trotzke). Dafür ist `contact` neu an einer Gruppe. Die Kontakt-Kachel oben kann nur EINE Person nennen und wäre für die andere Gruppe falsch — deshalb ist `lead` bei dieser Disziplin jetzt leer, die Kachel trägt nur noch die Abteilungs-Mail. So war es auf der alten Seite auch: dort gab es keine Ansprechperson für die Disziplin, nur je Gruppe. - Theresa Diener steht im Trainerteam vorn und ohne Stern (bei uns hinten). - Intro, Trainingsinhalte, Wettkämpfe und der Hinweis waren gekürzt; jetzt im Wortlaut der Abteilung. Den Gedankenstrich in "(Kür modifiziert – Leistungsklasse 3)" ersetzt ein Komma (Sprache & Ton). - Die Fußnote sagte "* So im Trainingsplan der Abteilung gekennzeichnet" — eine Verlegenheitsformulierung, weil wir die Bedeutung nicht kannten. Die alte Seite schreibt "* = ÜBUNGSLEITER", also jetzt "* Übungsleiterinnen und Übungsleiter" (Paarform, Haus-Stil). `level` bleibt "Turnen · fortgeschritten" ohne "Alter nach Absprache" — das hatte Felix am 31.07.2026 ausdrücklich aus dem Chip genommen. Zwei Folgen, die sonst still kaputtgegangen wären: die Seite hatte eine einzige Gruppe ohne Beschreibung und lief damit im Einzelgruppen-Layout. Mit zwei Gruppen, davon eine mit Beschreibung, rendert group-schedule eine Tab-Leiste — die braucht group-tabs.js, das die Seite nicht lud (tote Tab-Knöpfe). Und drei Flamingos-Trainerinnen tragen ein Sternchen, die erklärende Fußnote wurde auf dieser Seite nicht übergeben (drei unerklärte Sterne). Geprüft: Tabs "Flamingos" und "Leistungsturnen", Skript geladen, Fußnote da, Flamingos auf /turnen/eltern-kind-turnen nicht mehr erwähnt, kein Überlauf bei 390px, alle sechs Turn-Seiten 200. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NzeVVgMCrzCDJAKeLEdKr7
2026-07-31 22:40:25 +02:00
// Drei Flamingos-Trainerinnen tragen ein Sternchen. Ohne die Fußnote stünden
// hier drei unerklärte Sterne auf der Seite.
'footnote' => $data['footnote'] ?? '',
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
]);