From fb8cb4f4522f9adea9436780a9a7a658fd0a2f92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Mummert?= Date: Tue, 23 Dec 2025 11:17:50 +0100 Subject: [PATCH] Bugfix --- src/EventListener/IndexPageListener.php | 40 ++++++++++++------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/src/EventListener/IndexPageListener.php b/src/EventListener/IndexPageListener.php index 0180441..329f8c8 100644 --- a/src/EventListener/IndexPageListener.php +++ b/src/EventListener/IndexPageListener.php @@ -6,22 +6,24 @@ use Contao\CoreBundle\ServiceAnnotation\Hook; class IndexPageListener { - /** - * @Hook("indexPage") - */ + #[Hook('indexPage')] public function onIndexPage(string $content, array &$data, array &$set): void { if (!str_contains($content, 'MEILISEARCH')) { return; } + if (PHP_SAPI === 'cli') { + echo "INDEXPAGE LISTENER ACTIVE: " . ($set['url'] ?? '[no url in $set]') . "\n"; + } + $markers = $this->extractMarkers($content); if ($markers === []) { return; } /* - * PRIORITY + * PRIORITY: event/news > page */ if (isset($markers['event.priority'])) { $set['priority'] = (int) $markers['event.priority']; @@ -32,30 +34,27 @@ class IndexPageListener } /* - * KEYWORDS (kombiniert) + * KEYWORDS: kombinieren (alle vorhandenen) */ $keywords = []; foreach (['event.keywords', 'news.keywords', 'page.keywords'] as $key) { if (!empty($markers[$key])) { - $keywords = array_merge( - $keywords, - preg_split('/\s+/', trim($markers[$key])) - ); + $parts = preg_split('/\s+/', trim($markers[$key])) ?: []; + $keywords = array_merge($keywords, $parts); } } + $keywords = array_values(array_unique(array_filter($keywords))); if ($keywords !== []) { - $set['keywords'] = implode(' ', array_unique($keywords)); + $set['keywords'] = implode(' ', $keywords); } /* - * SEARCH IMAGE (UUID) + * SEARCH IMAGE UUID: event/news > page > custom + * (vorerst NUR UUID in tl_search) */ - foreach ( - ['event.searchimage', 'news.searchimage', 'page.searchimage', 'custom.searchimage'] - as $key - ) { + foreach (['event.searchimage', 'news.searchimage', 'page.searchimage', 'custom.searchimage'] as $key) { if (!empty($markers[$key])) { $set['imagepath'] = trim($markers[$key]); break; @@ -63,11 +62,11 @@ class IndexPageListener } /* - * START DATE (Timestamp) + * START DATE: event/news.date -> Timestamp (sortierbar) */ foreach (['event.date', 'news.date'] as $key) { if (!empty($markers[$key])) { - $ts = strtotime($markers[$key]); + $ts = strtotime(trim($markers[$key])); if ($ts !== false) { $set['startDate'] = $ts; } @@ -76,7 +75,6 @@ class IndexPageListener } } - private function extractMarkers(string $content): array { if (!preg_match('//s', $content, $m)) { @@ -84,10 +82,12 @@ class IndexPageListener } $markers = []; - foreach (preg_split('/\R/', trim($m[1])) as $line) { - if (!str_contains($line, '=')) { + foreach (preg_split('/\R/', trim($m[1])) ?: [] as $line) { + $line = trim($line); + if ($line === '' || !str_contains($line, '=')) { continue; } + [$k, $v] = explode('=', $line, 2); $markers[trim($k)] = trim($v); }