Files
tsv08kulmbach-website/app/pages/sportheimbuchung.php
fs 6a612e52c3 Sportheim mieten: Buchungsseite mit Anfrageformular
Neue Seite /sportheimbuchung mit Bento-Layout (Fotos, Lage, Ausstattung) und
einem Buchungsanfrage-Formular nach Projektkonvention (form-field-Komponente,
Status-Region, Honeypot + ft-Token, Whitelist-Validierung, Rate-Limiting, PRG).
Versand via Brevo SMTP über app/actions/sportheimbuchung-senden.php, POST-Route
in index.php. form-field um min/max-Attribute erweitert (Personenzahl-Feld).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HGzc6GhWhmLJt1jC2q1SRZ
2026-06-20 20:46:44 +02:00

88 lines
4.0 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
declare(strict_types=1);
/**
* Sportheimbuchung — Hero → 4 Argumente → Bento (Fotos + Lage + CTA) → Formular → FAQ.
* Inhalte: data/sportheimbuchung.json. Adresse: data/club.json (Single Source of Truth).
*/
$page = json_load('sportheimbuchung');
$club = json_load('club');
$meta = [
'title' => 'Sportheim mieten TSV 08 Kulmbach',
'description' => 'Das Sportheim auf der Hans-Rausch-Sportanlage in Kulmbach für Feiern und Veranstaltungen mieten Küche, Außenbereich und Beamer optional. Jetzt unverbindlich anfragen.',
'og_image' => 'img/pages/sportheim-2.jpg',
'schema' => page_schema(
[
['name' => 'Startseite', 'slug' => ''],
['name' => 'Der Verein', 'slug' => 'verein'],
['name' => 'Sportheim mieten', 'slug' => 'sportheimbuchung'],
],
$page['faq'] ?? []
),
];
$addr = $club['address'];
component('hero', ['hero' => $page['hero']]);
?>
<?php /* === argumente === */ ?>
<section class="section sponsor-arguments" id="ausstattung">
<div class="container">
<ul class="sponsor-arguments__grid" role="list">
<?php foreach ($page['features']['items'] as $item): ?>
<li class="sponsor-arguments__item">
<div class="sponsor-arguments__icon" aria-hidden="true"><?= icon($item['icon']) ?></div>
<div class="sponsor-arguments__body">
<h3 class="sponsor-arguments__title"><?= e($item['title']) ?></h3>
<p class="sponsor-arguments__text"><?= e($item['text']) ?></p>
</div>
</li>
<?php endforeach; ?>
</ul>
</div>
</section>
<?php /* === bento: fotos + lage + cta === */ ?>
<section class="section section--tinted" id="lage" aria-label="Impressionen und Lage">
<div class="container">
<div class="sportheim-bento">
<div class="sportheim-bento__photo sportheim-bento__photo--main">
<img src="<?= e(asset('img/pages/sportheim-1.jpg')) ?>"
alt="Innenansicht des Veranstaltungsraums im Sportheim"
width="1600" height="1066"
loading="lazy" decoding="async">
</div>
<div class="sportheim-bento__photo sportheim-bento__photo--sec">
<img src="<?= e(asset('img/pages/sportheim-2.jpg')) ?>"
alt="Das Sportheim auf der Hans-Rausch-Sportanlage"
width="1600" height="1066"
loading="lazy" decoding="async">
</div>
<div class="sportheim-bento__map">
<img src="<?= e(asset('img/pages/verein-1000.jpg')) ?>"
alt="Luftaufnahme der Hans-Rausch-Sportanlage mit Sportheim, Rasenplatz und Turnhalle"
width="1000" height="667"
loading="lazy" decoding="async">
</div>
<address class="sportheim-bento__addr">
<p class="sportheim-bento__addr-label">Lage &amp; Adresse</p>
<p class="sportheim-bento__addr-text">
<strong><?= e($addr['venue']) ?></strong><br>
<?= e($addr['street']) ?><br>
<?= e($addr['zip']) ?> <?= e($addr['city']) ?>
</p>
</address>
<div class="sportheim-bento__cta">
<p class="sportheim-bento__cta-title">Jetzt anfragen</p>
<a class="btn btn--outline" href="#buchung">Anfrage senden</a>
</div>
</div>
</div>
</section>
<?php
component('sportheimbuchung-form', ['form' => $page['form']]);
component('faq', ['faq' => $page['faq'] ?? []]);