From adb976e6214ce0b5aee6846c137a23cb4ca63808 Mon Sep 17 00:00:00 2001 From: Tobias Feigel Date: Sat, 28 Jun 2025 19:46:12 +0200 Subject: [PATCH] feat: enhance termine.php with year/month filtering, sidebar grouping, and improved layout styling --- assets/css/styles.css | 41 +++++++++ site/snippets/termine.php | 172 +++++++++++++++++++++++++++++--------- 2 files changed, 175 insertions(+), 38 deletions(-) diff --git a/assets/css/styles.css b/assets/css/styles.css index b721574..76800d4 100644 --- a/assets/css/styles.css +++ b/assets/css/styles.css @@ -268,6 +268,9 @@ .mx-auto { margin-inline: auto; } + .mt-1 { + margin-top: calc(var(--spacing) * 1); + } .mt-2 { margin-top: calc(var(--spacing) * 2); } @@ -295,6 +298,9 @@ .ml-1 { margin-left: calc(var(--spacing) * 1); } + .ml-4 { + margin-left: calc(var(--spacing) * 4); + } .block { display: block; } @@ -658,6 +664,9 @@ .text-sf_blau-500 { color: var(--color-sf_blau-500); } + .text-sf_blau-600 { + color: var(--color-sf_blau-600); + } .text-sf_blau-700 { color: var(--color-sf_blau-700); } @@ -753,6 +762,11 @@ } } } + .group-\[\.open\]\:rotate-90 { + &:is(:where(.group):is(.open) *) { + rotate: 90deg; + } + } .odd\:bg-white { &:nth-child(odd) { background-color: var(--color-white); @@ -855,6 +869,13 @@ } } } + .hover\:underline { + &:hover { + @media (hover: hover) { + text-decoration-line: underline; + } + } + } .focus\:text-blue-600 { &:focus { color: var(--color-blue-600); @@ -907,6 +928,11 @@ margin-top: calc(var(--spacing) * 8); } } + .md\:mb-0 { + @media (width >= 48rem) { + margin-bottom: calc(var(--spacing) * 0); + } + } .md\:block { @media (width >= 48rem) { display: block; @@ -927,11 +953,26 @@ width: calc(1/2 * 100%); } } + .md\:w-1\/4 { + @media (width >= 48rem) { + width: calc(1/4 * 100%); + } + } + .md\:w-3\/4 { + @media (width >= 48rem) { + width: calc(3/4 * 100%); + } + } .md\:w-36 { @media (width >= 48rem) { width: calc(var(--spacing) * 36); } } + .md\:flex-row { + @media (width >= 48rem) { + flex-direction: row; + } + } .md\:px-10 { @media (width >= 48rem) { padding-inline: calc(var(--spacing) * 10); diff --git a/site/snippets/termine.php b/site/snippets/termine.php index 6204b38..df6476e 100644 --- a/site/snippets/termine.php +++ b/site/snippets/termine.php @@ -67,46 +67,142 @@ return isset($event['DTSTART']) && $event['DTSTART'] >= $today; }); + // --- Deutsche Monatsnamen --- + $de_months = [ + '01' => 'Januar', '02' => 'Februar', '03' => 'März', '04' => 'April', '05' => 'Mai', '06' => 'Juni', + '07' => 'Juli', '08' => 'August', '09' => 'September', '10' => 'Oktober', '11' => 'November', '12' => 'Dezember' + ]; + + // --- Gruppierung aller Termine nach Jahr und Monat für die Sidebar --- + function group_events_by_year_month($events) { + $grouped = []; + foreach ($events as $event) { + if (!isset($event['DTSTART'])) continue; + $date = $event['DTSTART']; + $year = substr($date, 0, 4); + $month = substr($date, 4, 2); + $grouped[$year][$month][] = $event; + } + krsort($grouped); // Jahre absteigend + foreach ($grouped as &$months) { + krsort($months); // Monate absteigend + } + return $grouped; + } + $all_events_grouped = group_events_by_year_month($events); + + // --- Filter aus URL --- + $filter_jahr = $_GET['jahr'] ?? null; + $filter_monat = $_GET['monat'] ?? null; + if ($filter_jahr && $filter_monat) { + $filtered_events = array_filter($events, function($event) use ($filter_jahr, $filter_monat) { + $date = $event['DTSTART'] ?? ''; + return substr($date, 0, 4) === $filter_jahr && substr($date, 4, 2) === $filter_monat; + }); + } elseif ($filter_jahr) { + $filtered_events = array_filter($events, function($event) use ($filter_jahr) { + $date = $event['DTSTART'] ?? ''; + return substr($date, 0, 4) === $filter_jahr; + }); + } else { + $filtered_events = $future_events; + } ?>
-
- -
Keine bevorstehenden Termine gefunden.
- -
- - - - - - - - - - - - - - - - - - - - +
+ +
-
DatumUhrzeitTitelOrtBeschreibung
+ +
+ + + +
+ +
Keine Termine gefunden.
+ +
+ + + + + + + + + + + + + + + + + + +
DatumUhrzeitTitel
+
+
- -
+ +
\ No newline at end of file