This commit is contained in:
Jürgen Mummert
2025-12-26 23:08:48 +01:00
parent b57828d4e2
commit a4e18a84fd
2 changed files with 52 additions and 33 deletions
+6 -8
View File
@@ -74,14 +74,12 @@ class IndexPageListener
/* /*
* IMAGEPATH (UUID) * IMAGEPATH (UUID)
*/ */
$image = if (
$parsed['event']['searchimage'] ?? null ?? isset($parsed['page']['searchimage'])
$parsed['news']['searchimage'] ?? null ?? && is_string($parsed['page']['searchimage'])
$parsed['page']['searchimage'] ?? null ?? && $parsed['page']['searchimage'] !== ''
$parsed['custom']['searchimage'] ?? null; ) {
$set['imagepath'] = trim($parsed['page']['searchimage']);
if (is_string($image) && $image !== '') {
$set['imagepath'] = trim($image);
} }
/* /*
@@ -7,6 +7,7 @@ use Contao\CalendarEventsModel;
use Contao\NewsModel; use Contao\NewsModel;
use Contao\StringUtil; use Contao\StringUtil;
use Contao\Config; use Contao\Config;
use Contao\FilesModel;
class MeilisearchPageMarkerListener class MeilisearchPageMarkerListener
{ {
@@ -20,7 +21,7 @@ class MeilisearchPageMarkerListener
/* /*
* ===================== * =====================
* PAGE * PAGE (Basisdaten)
* ===================== * =====================
*/ */
$pageImageUuid = null; $pageImageUuid = null;
@@ -38,6 +39,7 @@ class MeilisearchPageMarkerListener
$data['page']['keywords'] = trim((string) $page->keywords); $data['page']['keywords'] = trim((string) $page->keywords);
} }
// tl_page.searchimage ist bereits UUID-STRING
if (!empty($page->searchimage)) { if (!empty($page->searchimage)) {
$pageImageUuid = $page->searchimage; $pageImageUuid = $page->searchimage;
} }
@@ -60,12 +62,12 @@ class MeilisearchPageMarkerListener
* EVENT * EVENT
*/ */
if (preg_match('#"@type"\s*:\s*"Event"#', $json)) { if (preg_match('#"@type"\s*:\s*"Event"#', $json)) {
$data['event'] ??= [];
if (preg_match('#\\\/schema\\\/events\\\/(\d+)#', $json, $m)) { if (preg_match('#\\\/schema\\\/events\\\/(\d+)#', $json, $m)) {
$event = CalendarEventsModel::findByPk((int) $m[1]); $event = CalendarEventsModel::findByPk((int) $m[1]);
if ($event !== null) { if ($event !== null) {
$data['event'] = [];
if (!empty($event->priority)) { if (!empty($event->priority)) {
$data['event']['priority'] = (int) $event->priority; $data['event']['priority'] = (int) $event->priority;
} }
@@ -75,26 +77,23 @@ class MeilisearchPageMarkerListener
} }
if ($event->addImage && !empty($event->singleSRC)) { if ($event->addImage && !empty($event->singleSRC)) {
// singleSRC ist BINARY → binToUuid korrekt
$data['event']['searchimage'] = StringUtil::binToUuid($event->singleSRC); $data['event']['searchimage'] = StringUtil::binToUuid($event->singleSRC);
} }
} }
} }
if (preg_match('#"startDate"\s*:\s*"([^"]+)"#', $json, $dm)) {
$data['event']['date'] = $dm[1];
}
} }
/* /*
* NEWS * NEWS
*/ */
if (preg_match('#"@type"\s*:\s*"NewsArticle"#', $json)) { if (preg_match('#"@type"\s*:\s*"NewsArticle"#', $json)) {
$data['news'] ??= [];
if (preg_match('#\\\/schema\\\/news\\\/(\d+)#', $json, $m)) { if (preg_match('#\\\/schema\\\/news\\\/(\d+)#', $json, $m)) {
$news = NewsModel::findByPk((int) $m[1]); $news = NewsModel::findByPk((int) $m[1]);
if ($news !== null) { if ($news !== null) {
$data['news'] = [];
if (!empty($news->priority)) { if (!empty($news->priority)) {
$data['news']['priority'] = (int) $news->priority; $data['news']['priority'] = (int) $news->priority;
} }
@@ -104,42 +103,64 @@ class MeilisearchPageMarkerListener
} }
if ($news->addImage && !empty($news->singleSRC)) { if ($news->addImage && !empty($news->singleSRC)) {
// singleSRC ist BINARY → binToUuid korrekt
$data['news']['searchimage'] = StringUtil::binToUuid($news->singleSRC); $data['news']['searchimage'] = StringUtil::binToUuid($news->singleSRC);
} }
} }
} }
if (preg_match('#"datePublished"\s*:\s*"([^"]+)"#', $json, $dm)) {
$data['news']['date'] = $dm[1];
}
} }
} }
/* /*
* CUSTOM SEARCHIMAGE (Markup) * =====================
* FINALE SEARCHIMAGE-ENTSCHEIDUNG
* =====================
*/ */
if ( $finalSearchImageUuid = null;
preg_match('#data-searchimage-uuid="([a-f0-9\-]{36})"#i', $buffer, $m)
) { // 1. EVENT > NEWS
$data['custom']['searchimage'] = $m[1]; if (!empty($data['event']['searchimage'])) {
$finalSearchImageUuid = $data['event']['searchimage'];
} elseif (!empty($data['news']['searchimage'])) {
$finalSearchImageUuid = $data['news']['searchimage'];
} }
/* // 2. CUSTOM SEARCHIMAGE (Markup)
* PAGE IMAGE FALLBACK if (
*/ $finalSearchImageUuid === null
if ($pageImageUuid) { && preg_match('#data-searchimage-uuid="([a-f0-9\-]{36})"#i', $buffer, $m)
$data['page']['searchimage'] = $pageImageUuid; && FilesModel::findByUuid($m[1]) !== null
} else { ) {
$finalSearchImageUuid = $m[1];
}
// 3. PAGE SEARCHIMAGE
if ($finalSearchImageUuid === null && $pageImageUuid) {
$finalSearchImageUuid = $pageImageUuid;
}
// 4. FALLBACK (tl_settings)
if ($finalSearchImageUuid === null) {
$fallback = Config::get('meilisearch_fallback_image'); $fallback = Config::get('meilisearch_fallback_image');
if ($fallback) { if ($fallback) {
$data['page']['searchimage'] = StringUtil::binToUuid($fallback); // fallback ist BINARY → binToUuid korrekt
$finalSearchImageUuid = StringUtil::binToUuid($fallback);
} }
} }
if ($finalSearchImageUuid !== null) {
$data['page']['searchimage'] = $finalSearchImageUuid;
}
if ($data === []) { if ($data === []) {
return $buffer; return $buffer;
} }
/*
* =====================
* MARKER AUSGEBEN
* =====================
*/
$marker = $marker =
"\n<!--\nMEILISEARCH_JSON\n" . "\n<!--\nMEILISEARCH_JSON\n" .
json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) .