From bbe05bd76595a3026c2c876df53a3258f10b303c Mon Sep 17 00:00:00 2001 From: Tobias Feigel Date: Thu, 18 Dec 2025 19:00:05 +0100 Subject: [PATCH] Fix Calendar Loading Problems --- site/collections/termine.php | 33 ++++-- site/snippets/home-termine.php | 171 ++++++++++++++++------------ site/snippets/termine.php | 201 +++++++++++++++++---------------- 3 files changed, 228 insertions(+), 177 deletions(-) diff --git a/site/collections/termine.php b/site/collections/termine.php index 6e7e3e3..56b3868 100644 --- a/site/collections/termine.php +++ b/site/collections/termine.php @@ -1,4 +1,3 @@ - Kalender konnte nicht geladen werden.'; - - return; -} +// Cache für 24 Stunden (in Minuten) +$cacheDuration = 24 * 60; +$cacheId = 'google_calendar_events'; +$cache = kirby()->cache('pages'); // Termine parsen function parse_ics($ics) @@ -134,9 +130,26 @@ function parse_ics($ics) return $events; } -$events = parse_ics($ics); +return function () use ($cache, $cacheId, $cacheDuration) { + // Versuche Daten aus dem Cache zu laden + $events = $cache->get($cacheId); + + if ($events === null) { + // Wenn nicht im Cache, neu laden + $ics = @file_get_contents(CAL_URL); + + if (!$ics) { + // Fehler beim Laden (z.B. 429 Error) + return null; + } + + // Termine parsen + $events = parse_ics($ics); + + // In Cache speichern + $cache->set($cacheId, $events, $cacheDuration); + } -return function () use ($events) { return $events; }; diff --git a/site/snippets/home-termine.php b/site/snippets/home-termine.php index 016710c..e490ea6 100644 --- a/site/snippets/home-termine.php +++ b/site/snippets/home-termine.php @@ -1,33 +1,40 @@ +
+

Bevorstehende Termine

+
Die Termine können gerade nicht geladen werden.
+
+ format('Ymd'); // Nur zukünftige Termine anzeigen $future_events = array_filter($events, function ($event) use ($today) { - return isset($event['DTSTART']) && $event['DTSTART'] >= $today; + return isset($event['DTSTART']) && $event['DTSTART'] >= $today; }); // Termine nach DTSTART in aufsteigender Reihenfolge sortieren usort($future_events, function ($a, $b) { - return $a['DTSTART'] <=> $b['DTSTART']; + return $a['DTSTART'] <=> $b['DTSTART']; }); // --- Deutsche Monatsnamen --- $de_months = [ - '01' => 'Jan', - '02' => 'Feb', - '03' => 'Mrz', - '04' => 'Apr', - '05' => 'Mai', - '06' => 'Jun', - '07' => 'Jul', - '08' => 'Aug', - '09' => 'Sep', - '10' => 'Okt', - '11' => 'Nov', - '12' => 'Dez', + '01' => 'Jan', + '02' => 'Feb', + '03' => 'Mrz', + '04' => 'Apr', + '05' => 'Mai', + '06' => 'Jun', + '07' => 'Jul', + '08' => 'Aug', + '09' => 'Sep', + '10' => 'Okt', + '11' => 'Nov', + '12' => 'Dez', ]; ?> @@ -35,8 +42,12 @@ $de_months = [

Bevorstehende Termine

-
@@ -49,18 +60,18 @@ $de_months = [ $location = $event['LOCATION'] ?? ''; $desc = $event['DESCRIPTION'] ?? ''; $timezone = $event['DTSTART_TZID'] ?? null; - + // Sichere Funktionsaufrufe mit Null-Checks - $date_info = function_exists('format_ics_date_with_timezone') - ? format_ics_date_with_timezone($start, $timezone) + $date_info = function_exists('format_ics_date_with_timezone') + ? format_ics_date_with_timezone($start, $timezone) : ['display' => '', 'has_time' => false, 'iso' => '']; - + $date = $date_info['display'] ?? ''; $time = ($date_info['has_time'] ?? false) ? substr($date, 11) : 'ganztägig'; $day = substr($date, 0, 2); $month = substr($date, 3, 2); $iso_date = $date_info['iso'] ?? ''; - + // Sichere Array-Zugriffe $month_name = $de_months[$month] ?? 'Unbek'; $event_summary = htmlspecialchars($summary, ENT_QUOTES, 'UTF-8'); @@ -69,57 +80,64 @@ $de_months = [ $safe_time = htmlspecialchars($time, ENT_QUOTES, 'UTF-8'); ?> -
- -
-
-
- -
- -
+
+ +
+
+
+ +
+ +
- -
-
-
+ +
+
+
- -
-
-
-
-
-
-
-
+ +
+
+
+
+
+
+
+
+
+
+
+

+

+ + ab Uhr + + ganztägig + +

-
-
-

-

- - ab Uhr - - ganztägig - -

-
-