Add Index Listener

This commit is contained in:
Jürgen Mummert
2025-12-22 21:43:43 +01:00
parent ac1db3ff9a
commit 01949362ce
3 changed files with 22 additions and 89 deletions
@@ -1,32 +0,0 @@
<?php
namespace MummertMedia\ContaoMeilisearchBundle\EventListener;
use Contao\CalendarEventsModel;
use Contao\Template;
class MeilisearchEventContextListener
{
public function onParseFrontendTemplate(string $buffer, string $template): string
{
// Nur Event-Reader-Modul
if ($template !== 'mod_eventreader') {
return $buffer;
}
// Event kommt IM Template an
if (
isset($GLOBALS['objEvent']) &&
$GLOBALS['objEvent'] instanceof CalendarEventsModel
) {
$eventId = (int) $GLOBALS['objEvent']->id;
// Minimaler, stabiler Marker
$marker = "\n<!-- MEILI_EVENT id={$eventId} -->\n";
return $buffer . $marker;
}
return $buffer;
}
}
@@ -2,70 +2,42 @@
namespace MummertMedia\ContaoMeilisearchBundle\EventListener; namespace MummertMedia\ContaoMeilisearchBundle\EventListener;
use Contao\CalendarEventsModel;
use Contao\Config;
use Contao\PageModel;
use Contao\StringUtil;
class MeilisearchPageMarkerListener class MeilisearchPageMarkerListener
{ {
public function onOutputFrontendTemplate(string $buffer, string $template): string public function onOutputFrontendTemplate(string $buffer, string $template): string
{ {
if (!isset($GLOBALS['objPage']) || !$GLOBALS['objPage'] instanceof PageModel) { $debug = [];
return $buffer;
}
$lines = ['MEILISEARCH']; // 🔍 Event erkennen
$page = $GLOBALS['objPage']; if (preg_match('#"@type"\s*:\s*"Event"#', $buffer)) {
$debug[] = 'context=event';
/* ================= PAGE ================= */ if (preg_match('#"#/schema/events/(\d+)"#', $buffer, $m)) {
$debug[] = 'event.id=' . $m[1];
if ((int) $page->priority > 0) { } else {
$lines[] = 'page.priority=' . (int) $page->priority; $debug[] = 'event.id=NOT_FOUND';
}
if (trim((string) $page->keywords) !== '') {
$lines[] = 'page.keywords=' . trim((string) $page->keywords);
}
$searchImageUuid = null;
if (!empty($page->searchimage)) {
$searchImageUuid = StringUtil::binToUuid($page->searchimage);
} elseif ($fallback = Config::get('meilisearch_fallback_image')) {
$searchImageUuid = StringUtil::binToUuid($fallback);
}
if ($searchImageUuid) {
$lines[] = 'page.searchimage=' . $searchImageUuid;
}
/* ================= EVENT ================= */
if (preg_match('/<!--\s*MEILI_EVENT id=(\d+)\s*-->/', $buffer, $m)) {
$eventId = (int) $m[1];
$event = CalendarEventsModel::findByPk($eventId);
if ($event !== null) {
if ((int) $event->priority > 0) {
$lines[] = 'event.priority=' . (int) $event->priority;
}
if (trim((string) $event->keywords) !== '') {
$lines[] = 'event.keywords=' . trim((string) $event->keywords);
} }
} }
// 🔍 News erkennen (vorbereitet)
if (preg_match('#"@type"\s*:\s*"NewsArticle"#', $buffer)) {
$debug[] = 'context=news';
if (preg_match('#"#/schema/news/(\d+)"#', $buffer, $m)) {
$debug[] = 'news.id=' . $m[1];
} else {
$debug[] = 'news.id=NOT_FOUND';
}
} }
/* ================= OUTPUT ================= */ if (empty($debug)) {
if (count($lines) === 1) {
return $buffer; return $buffer;
} }
$marker = $marker =
"\n<!--\n" . "\n<!--\n" .
implode("\n", $lines) . "MEILISEARCH DEBUG\n" .
implode("\n", $debug) .
"\n-->\n"; "\n-->\n";
return str_replace('</body>', $marker . '</body>', $buffer); return str_replace('</body>', $marker . '</body>', $buffer);
+1 -8
View File
@@ -2,7 +2,6 @@
use MummertMedia\ContaoMeilisearchBundle\EventListener\IndexPageListener; use MummertMedia\ContaoMeilisearchBundle\EventListener\IndexPageListener;
use MummertMedia\ContaoMeilisearchBundle\EventListener\MeilisearchPageMarkerListener; use MummertMedia\ContaoMeilisearchBundle\EventListener\MeilisearchPageMarkerListener;
use MummertMedia\ContaoMeilisearchBundle\EventListener\MeilisearchEventContextListener;
$GLOBALS['TL_HOOKS']['outputFrontendTemplate'][] = [ $GLOBALS['TL_HOOKS']['outputFrontendTemplate'][] = [
@@ -15,11 +14,5 @@ $GLOBALS['TL_HOOKS']['indexPage'][] = [
'onIndexPage' 'onIndexPage'
]; ];
$GLOBALS['TL_HOOKS']['parseFrontendTemplate'][] = [
MeilisearchEventContextListener::class,
'onParseFrontendTemplate',
];
if (!isset($GLOBALS['MEILISEARCH_MARKERS'])) {
$GLOBALS['MEILISEARCH_MARKERS'] = [];
}