Add Index Listener

This commit is contained in:
Jürgen Mummert
2025-12-22 16:35:02 +01:00
parent da1bbfa443
commit b6e6aacf83
3 changed files with 102 additions and 0 deletions
+25
View File
@@ -0,0 +1,25 @@
<?php
namespace MummertMedia\ContaoMeilisearchBundle\EventListener;
use MummertMedia\ContaoMeilisearchBundle\Service\SearchDataProvider;
class IndexPageListener
{
public function __construct(
private readonly SearchDataProvider $dataProvider
) {}
public function __invoke(string $content, array &$data, array &$set): void
{
$searchData = $this->dataProvider->getSearchData($set);
if ($searchData === null) {
return;
}
// landet direkt in tl_search
$data['priority'] = $searchData['priority'];
$data['keywords'] = $searchData['keywords'];
}
}
+8
View File
@@ -0,0 +1,8 @@
services:
MummertMedia\ContaoMeilisearchBundle\Service\SearchDataProvider: ~
MummertMedia\ContaoMeilisearchBundle\EventListener\IndexPageListener:
arguments:
- '@MummertMedia\ContaoMeilisearchBundle\Service\SearchDataProvider'
tags:
- { name: contao.hook, hook: indexPage }
+69
View File
@@ -0,0 +1,69 @@
<?php
namespace MummertMedia\ContaoMeilisearchBundle\Service;
use Contao\Database;
class SearchDataProvider
{
public function getSearchData(array $set): ?array
{
return match ($set['type'] ?? null) {
'page' => $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;
}
}