Kontaktseite: eigene /kontakt mit Hero + Formular

Neue /kontakt-Seite (Hero + wiederverwendete contact-form-Komponente, ohne
Intro-Block). Behebt die bisher ins 404 laufenden "Kontakt aufnehmen"-CTAs.

- contact-form: optionales $intro + Rücksprung-Slug $return (Hidden-Feld)
- contact-submit: PRG-Redirect zur absendenden Seite, whitelist-validiert
  gegen routes.php (kein Open-Redirect)
- Verlinkt im Footer-Rechtsbereich und im Menü "Der Verein"

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HGzc6GhWhmLJt1jC2q1SRZ
This commit is contained in:
2026-06-20 21:14:28 +02:00
parent 23778324c7
commit 08f5a1ae9b
7 changed files with 63 additions and 6 deletions

24
app/pages/kontakt.php Normal file
View File

@@ -0,0 +1,24 @@
<?php
declare(strict_types=1);
/**
* Kontaktseite — Hero + Kontaktformular (dieselbe Komponente wie auf der Startseite).
* Inhalte: data/kontakt.json (Single Source of Truth).
*/
$page = json_load('kontakt');
$meta = [
'title' => 'Kontakt',
'description' => 'Kontakt zum TSV 08 Kulmbach: Schreib uns über das Formular zu Fußball, Turnen oder einem allgemeinen Anliegen. Wir melden uns so schnell wie möglich.',
'og_image' => 'img/pages/vereinsgelaende-1600.jpg',
'scripts' => ['form.js'],
'schema' => page_schema([
['name' => 'Startseite', 'slug' => ''],
['name' => 'Kontakt', 'slug' => 'kontakt'],
]),
];
component('hero', ['hero' => $page['hero']]);
// Kein Intro-Block: Der Hero liefert bereits Überschrift + Teaser, hier folgt nur das Formular.
component('contact-form', ['return' => 'kontakt']);