diff --git a/src/EventListener/MeilisearchEventMarkerListener.php b/src/EventListener/MeilisearchEventMarkerListener.php new file mode 100644 index 0000000..f4f9fda --- /dev/null +++ b/src/EventListener/MeilisearchEventMarkerListener.php @@ -0,0 +1,28 @@ + (int) ($event->priority ?? 0), + 'keywords' => trim((string) ($event->keywords ?? '')), + ]; + + return $buffer; + } +} \ No newline at end of file diff --git a/src/EventListener/MeilisearchNewsMarkerListener.php b/src/EventListener/MeilisearchNewsMarkerListener.php new file mode 100644 index 0000000..ee9ef0d --- /dev/null +++ b/src/EventListener/MeilisearchNewsMarkerListener.php @@ -0,0 +1,29 @@ + (int) ($news->priority ?? 0), + 'keywords' => trim((string) ($news->keywords ?? '')), + ]; + + return $buffer; + } +} \ No newline at end of file diff --git a/src/EventListener/MeilisearchPageMarkerListener.php b/src/EventListener/MeilisearchPageMarkerListener.php index fcba6e8..1d8804b 100644 --- a/src/EventListener/MeilisearchPageMarkerListener.php +++ b/src/EventListener/MeilisearchPageMarkerListener.php @@ -10,24 +10,28 @@ class MeilisearchPageMarkerListener { public function onOutputFrontendTemplate(string $buffer, string $template): string { + // Nur Frontend-Seiten if (!isset($GLOBALS['objPage']) || !$GLOBALS['objPage'] instanceof PageModel) { return $buffer; } + $markers = $GLOBALS['MEILISEARCH_MARKERS'] ?? []; + $page = $GLOBALS['objPage']; + /* + * PAGE-DATEN (immer vorhanden) + */ $priority = (int) ($page->priority ?? 0); $keywords = trim((string) ($page->keywords ?? '')); - // 🔹 searchimage (Page → Fallback) + // searchimage: Page → Fallback $searchImageUuid = null; - // 1. Page-spezifisch if (!empty($page->searchimage)) { $searchImageUuid = StringUtil::binToUuid($page->searchimage); } - // 2. Fallback aus tl_settings if (!$searchImageUuid) { $fallback = Config::get('meilisearch_fallback_image'); if ($fallback) { @@ -35,25 +39,36 @@ class MeilisearchPageMarkerListener } } - // Wenn wirklich GAR nichts vorhanden ist → nichts tun - if ($priority <= 0 && $keywords === '' && !$searchImageUuid) { - return $buffer; - } + // Page-Marker sammeln + $markers['page'] = [ + 'priority' => $priority > 0 ? $priority : null, + 'keywords' => $keywords !== '' ? $keywords : null, + 'searchimage' => $searchImageUuid, + ]; - // 🔹 Marker aufbauen + /* + * MARKER AUFBAUEN + */ $lines = []; $lines[] = 'MEILISEARCH'; - if ($priority > 0) { - $lines[] = 'page.priority=' . $priority; + 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; + } } - if ($keywords !== '') { - $lines[] = 'page.keywords=' . $keywords; - } - - if ($searchImageUuid) { - $lines[] = 'page.searchimage=' . $searchImageUuid; + // Wenn wirklich nichts da ist → nichts anhängen + if (count($lines) === 1) { + return $buffer; } $marker = diff --git a/src/Resources/contao/config/config.php b/src/Resources/contao/config/config.php index 11ffbaf..27b755f 100644 --- a/src/Resources/contao/config/config.php +++ b/src/Resources/contao/config/config.php @@ -2,6 +2,8 @@ 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, @@ -11,4 +13,16 @@ $GLOBALS['TL_HOOKS']['outputFrontendTemplate'][] = [ $GLOBALS['TL_HOOKS']['indexPage'][] = [ IndexPageListener::class, 'onIndexPage' -]; \ No newline at end of file +]; + +$GLOBALS['TL_HOOKS']['parseFrontendTemplate'][] = [ + MeilisearchNewsMarkerListener::class, + 'onParseFrontendTemplate', +]; + +$GLOBALS['TL_HOOKS']['parseFrontendTemplate'][] = [ + MeilisearchEventMarkerListener::class, + 'onParseFrontendTemplate', +]; + +$GLOBALS['MEILISEARCH_MARKERS'] = []; \ No newline at end of file