From f41357bee51ad6d7dd97365924a613a230b16777 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Mummert?= Date: Mon, 22 Dec 2025 21:16:50 +0100 Subject: [PATCH] Add Index Listener --- .../MeilisearchEventMarkerListener.php | 38 ---------- .../MeilisearchNewsMarkerListener.php | 36 --------- .../MeilisearchPageMarkerListener.php | 76 +++++++++---------- src/Resources/contao/config/config.php | 12 +-- 4 files changed, 38 insertions(+), 124 deletions(-) delete mode 100644 src/EventListener/MeilisearchEventMarkerListener.php delete mode 100644 src/EventListener/MeilisearchNewsMarkerListener.php diff --git a/src/EventListener/MeilisearchEventMarkerListener.php b/src/EventListener/MeilisearchEventMarkerListener.php deleted file mode 100644 index 96b68f5..0000000 --- a/src/EventListener/MeilisearchEventMarkerListener.php +++ /dev/null @@ -1,38 +0,0 @@ -event) || - !$template->event instanceof CalendarEventsModel - ) { - return; - } - - $event = $template->event; - - $priority = (int) ($event->priority ?? 0); - $keywords = trim((string) ($event->keywords ?? '')); - - if ($priority <= 0 && $keywords === '') { - return; - } - - // ✅ Marker setzen (merge-sicher) - $GLOBALS['MEILISEARCH_MARKERS']['event'] = array_merge( - $GLOBALS['MEILISEARCH_MARKERS']['event'] ?? [], - [ - 'priority' => $priority > 0 ? $priority : null, - 'keywords' => $keywords !== '' ? $keywords : null, - ] - ); - } -} \ No newline at end of file diff --git a/src/EventListener/MeilisearchNewsMarkerListener.php b/src/EventListener/MeilisearchNewsMarkerListener.php deleted file mode 100644 index 1e61399..0000000 --- a/src/EventListener/MeilisearchNewsMarkerListener.php +++ /dev/null @@ -1,36 +0,0 @@ -getName() !== 'mod_newsreader') { - return; - } - - if ( - !isset($GLOBALS['objArticle']) || - !$GLOBALS['objArticle'] instanceof NewsModel - ) { - return; - } - - // 🔥 News vollständig laden (inkl. Custom-Felder) - $news = NewsModel::findByPk($GLOBALS['objArticle']->id); - - if ($news === null) { - return; - } - - $GLOBALS['MEILISEARCH_MARKERS']['news'] = [ - 'priority' => (int) ($news->priority ?? 0), - 'keywords' => trim((string) ($news->keywords ?? '')), - ]; - } -} \ No newline at end of file diff --git a/src/EventListener/MeilisearchPageMarkerListener.php b/src/EventListener/MeilisearchPageMarkerListener.php index bcc418f..3bc43a9 100644 --- a/src/EventListener/MeilisearchPageMarkerListener.php +++ b/src/EventListener/MeilisearchPageMarkerListener.php @@ -2,6 +2,7 @@ namespace MummertMedia\ContaoMeilisearchBundle\EventListener; +use Contao\CalendarEventsModel; use Contao\Config; use Contao\PageModel; use Contao\StringUtil; @@ -10,62 +11,59 @@ class MeilisearchPageMarkerListener { public function onOutputFrontendTemplate(string $buffer, string $template): string { - // Nur im Frontend if (!isset($GLOBALS['objPage']) || !$GLOBALS['objPage'] instanceof PageModel) { return $buffer; } - // 🔹 Marker aus vorherigen Listenern übernehmen - $markers = $GLOBALS['MEILISEARCH_MARKERS'] ?? []; + $lines = ['MEILISEARCH']; + // ========================= + // PAGE + // ========================= $page = $GLOBALS['objPage']; - // --- Page-Daten --- - $pagePriority = (int) ($page->priority ?? 0); - $pageKeywords = trim((string) ($page->keywords ?? '')); + if ((int) $page->priority > 0) { + $lines[] = 'page.priority=' . (int) $page->priority; + } - // --- Page searchimage → Fallback --- + if (trim((string) $page->keywords) !== '') { + $lines[] = 'page.keywords=' . trim((string) $page->keywords); + } + + // searchimage (Page → Fallback) $searchImageUuid = null; if (!empty($page->searchimage)) { $searchImageUuid = StringUtil::binToUuid($page->searchimage); + } elseif ($fallback = Config::get('meilisearch_fallback_image')) { + $searchImageUuid = StringUtil::binToUuid($fallback); } - if (!$searchImageUuid) { - $fallback = Config::get('meilisearch_fallback_image'); - if ($fallback) { - $searchImageUuid = StringUtil::binToUuid($fallback); + if ($searchImageUuid) { + $lines[] = 'page.searchimage=' . $searchImageUuid; + } + + // ========================= + // EVENT (Detailseite!) + // ========================= + if ( + isset($GLOBALS['objEvent']) && + $GLOBALS['objEvent'] instanceof CalendarEventsModel + ) { + $event = $GLOBALS['objEvent']; + + if ((int) $event->priority > 0) { + $lines[] = 'event.priority=' . (int) $event->priority; + } + + if (trim((string) $event->keywords) !== '') { + $lines[] = 'event.keywords=' . trim((string) $event->keywords); } } - // Page-Marker nur ergänzen (niemals löschen) - $markers['page'] = array_merge( - $markers['page'] ?? [], - [ - 'priority' => $pagePriority > 0 ? $pagePriority : null, - 'keywords' => $pageKeywords !== '' ? $pageKeywords : null, - 'searchimage' => $searchImageUuid ?: null, - ] - ); - - // 🔹 Ausgabe bauen - $lines = ['MEILISEARCH']; - - foreach ($markers as $scope => $data) { - if (!is_array($data)) { - continue; - } - - foreach ($data as $key => $value) { - if ($value === null || $value === '' || $value === 0) { - continue; - } - - $lines[] = $scope . '.' . $key . '=' . $value; - } - } - - // Wenn nichts drinsteht → nichts anhängen + // ========================= + // OUTPUT + // ========================= if (count($lines) === 1) { return $buffer; } diff --git a/src/Resources/contao/config/config.php b/src/Resources/contao/config/config.php index 7fda187..3a550e8 100644 --- a/src/Resources/contao/config/config.php +++ b/src/Resources/contao/config/config.php @@ -2,8 +2,7 @@ use MummertMedia\ContaoMeilisearchBundle\EventListener\IndexPageListener; use MummertMedia\ContaoMeilisearchBundle\EventListener\MeilisearchPageMarkerListener; -use MummertMedia\ContaoMeilisearchBundle\EventListener\MeilisearchNewsMarkerListener; -use MummertMedia\ContaoMeilisearchBundle\EventListener\MeilisearchEventMarkerListener; + $GLOBALS['TL_HOOKS']['outputFrontendTemplate'][] = [ MeilisearchPageMarkerListener::class, @@ -15,15 +14,6 @@ $GLOBALS['TL_HOOKS']['indexPage'][] = [ 'onIndexPage' ]; -$GLOBALS['TL_HOOKS']['parseTemplate'][] = [ - MeilisearchNewsMarkerListener::class, - 'onParseTemplate', -]; - -$GLOBALS['TL_HOOKS']['parseTemplate'][] = [ - MeilisearchEventMarkerListener::class, - 'onParseTemplate', -]; if (!isset($GLOBALS['MEILISEARCH_MARKERS'])) { $GLOBALS['MEILISEARCH_MARKERS'] = [];