From b6e6aacf836cc0b9fc148aaec7b4693614c5af36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Mummert?= Date: Mon, 22 Dec 2025 16:35:02 +0100 Subject: [PATCH] Add Index Listener --- src/EventListener/IndexPageListener.php | 25 +++++++++ src/Resources/config/services.yaml | 8 +++ src/Service/SearchDataProvider.php | 69 +++++++++++++++++++++++++ 3 files changed, 102 insertions(+) create mode 100644 src/EventListener/IndexPageListener.php create mode 100644 src/Service/SearchDataProvider.php diff --git a/src/EventListener/IndexPageListener.php b/src/EventListener/IndexPageListener.php new file mode 100644 index 0000000..b84c03c --- /dev/null +++ b/src/EventListener/IndexPageListener.php @@ -0,0 +1,25 @@ +dataProvider->getSearchData($set); + + if ($searchData === null) { + return; + } + + // landet direkt in tl_search + $data['priority'] = $searchData['priority']; + $data['keywords'] = $searchData['keywords']; + } +} \ No newline at end of file diff --git a/src/Resources/config/services.yaml b/src/Resources/config/services.yaml index e69de29..b94a019 100644 --- a/src/Resources/config/services.yaml +++ b/src/Resources/config/services.yaml @@ -0,0 +1,8 @@ +services: + MummertMedia\ContaoMeilisearchBundle\Service\SearchDataProvider: ~ + + MummertMedia\ContaoMeilisearchBundle\EventListener\IndexPageListener: + arguments: + - '@MummertMedia\ContaoMeilisearchBundle\Service\SearchDataProvider' + tags: + - { name: contao.hook, hook: indexPage } \ No newline at end of file diff --git a/src/Service/SearchDataProvider.php b/src/Service/SearchDataProvider.php new file mode 100644 index 0000000..da7a378 --- /dev/null +++ b/src/Service/SearchDataProvider.php @@ -0,0 +1,69 @@ + $this->getPageSearchData((int) ($set['pageId'] ?? 0)), + 'news' => $this->getNewsSearchData((int) ($set['newsId'] ?? 0)), + 'calendar' => $this->getEventSearchData((int) ($set['eventId'] ?? 0)), + default => null, + }; + } + + private function getPageSearchData(int $pageId): ?array + { + if ($pageId <= 0) { + return null; + } + + $row = Database::getInstance() + ->prepare('SELECT priority, keywords FROM tl_page WHERE id=?') + ->execute($pageId) + ->fetchAssoc(); + + return $row ? [ + 'priority' => (int) $row['priority'], + 'keywords' => (string) $row['keywords'], + ] : null; + } + + private function getNewsSearchData(int $newsId): ?array + { + if ($newsId <= 0) { + return null; + } + + $row = Database::getInstance() + ->prepare('SELECT priority, keywords FROM tl_news WHERE id=?') + ->execute($newsId) + ->fetchAssoc(); + + return $row ? [ + 'priority' => (int) $row['priority'], + 'keywords' => (string) $row['keywords'], + ] : null; + } + + private function getEventSearchData(int $eventId): ?array + { + if ($eventId <= 0) { + return null; + } + + $row = Database::getInstance() + ->prepare('SELECT priority, keywords FROM tl_calendar_events WHERE id=?') + ->execute($eventId) + ->fetchAssoc(); + + return $row ? [ + 'priority' => (int) $row['priority'], + 'keywords' => (string) $row['keywords'], + ] : null; + } +} \ No newline at end of file