Bugfix
This commit is contained in:
@@ -2,12 +2,12 @@
|
|||||||
|
|
||||||
namespace MummertMedia\ContaoMeilisearchBundle\EventListener;
|
namespace MummertMedia\ContaoMeilisearchBundle\EventListener;
|
||||||
|
|
||||||
use Contao\PageModel;
|
|
||||||
use Contao\CalendarEventsModel;
|
use Contao\CalendarEventsModel;
|
||||||
use Contao\NewsModel;
|
|
||||||
use Contao\StringUtil;
|
|
||||||
use Contao\Config;
|
use Contao\Config;
|
||||||
use Contao\FilesModel;
|
use Contao\FilesModel;
|
||||||
|
use Contao\NewsModel;
|
||||||
|
use Contao\PageModel;
|
||||||
|
use Contao\StringUtil;
|
||||||
|
|
||||||
class MeilisearchPageMarkerListener
|
class MeilisearchPageMarkerListener
|
||||||
{
|
{
|
||||||
@@ -39,9 +39,22 @@ class MeilisearchPageMarkerListener
|
|||||||
$data['page']['keywords'] = trim((string) $page->keywords);
|
$data['page']['keywords'] = trim((string) $page->keywords);
|
||||||
}
|
}
|
||||||
|
|
||||||
// tl_page.searchimage ist BINARY → UUID
|
// Achtung: je nach Felddefinition kann searchimage BINARY(16) oder UUID-String sein.
|
||||||
|
// Wir versuchen beides robust zu behandeln.
|
||||||
if (!empty($page->searchimage)) {
|
if (!empty($page->searchimage)) {
|
||||||
$pageImageUuid = StringUtil::binToUuid($page->searchimage);
|
$raw = (string) $page->searchimage;
|
||||||
|
|
||||||
|
// UUID-String?
|
||||||
|
if (preg_match('/^[a-f0-9-]{36}$/i', $raw)) {
|
||||||
|
$pageImageUuid = $raw;
|
||||||
|
} else {
|
||||||
|
// vermutlich BINARY(16)
|
||||||
|
try {
|
||||||
|
$pageImageUuid = StringUtil::binToUuid($raw);
|
||||||
|
} catch (\Throwable) {
|
||||||
|
// ignorieren
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -57,7 +70,6 @@ class MeilisearchPageMarkerListener
|
|||||||
);
|
);
|
||||||
|
|
||||||
foreach ($jsonBlocks[1] as $json) {
|
foreach ($jsonBlocks[1] as $json) {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* EVENT
|
* EVENT
|
||||||
*/
|
*/
|
||||||
@@ -116,14 +128,14 @@ class MeilisearchPageMarkerListener
|
|||||||
*/
|
*/
|
||||||
$finalSearchImageUuid = null;
|
$finalSearchImageUuid = null;
|
||||||
|
|
||||||
// 1. EVENT > NEWS
|
// 1) EVENT > NEWS
|
||||||
if (!empty($data['event']['searchimage'])) {
|
if (!empty($data['event']['searchimage'])) {
|
||||||
$finalSearchImageUuid = $data['event']['searchimage'];
|
$finalSearchImageUuid = $data['event']['searchimage'];
|
||||||
} elseif (!empty($data['news']['searchimage'])) {
|
} elseif (!empty($data['news']['searchimage'])) {
|
||||||
$finalSearchImageUuid = $data['news']['searchimage'];
|
$finalSearchImageUuid = $data['news']['searchimage'];
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. CUSTOM SEARCHIMAGE (Markup)
|
// 2) CUSTOM SEARCHIMAGE (Markup)
|
||||||
if (
|
if (
|
||||||
$finalSearchImageUuid === null
|
$finalSearchImageUuid === null
|
||||||
&& preg_match('#data-searchimage-uuid="([a-f0-9\-]{36})"#i', $buffer, $m)
|
&& preg_match('#data-searchimage-uuid="([a-f0-9\-]{36})"#i', $buffer, $m)
|
||||||
@@ -132,12 +144,12 @@ class MeilisearchPageMarkerListener
|
|||||||
$finalSearchImageUuid = $m[1];
|
$finalSearchImageUuid = $m[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. PAGE SEARCHIMAGE
|
// 3) PAGE SEARCHIMAGE
|
||||||
if ($finalSearchImageUuid === null && $pageImageUuid) {
|
if ($finalSearchImageUuid === null && $pageImageUuid) {
|
||||||
$finalSearchImageUuid = $pageImageUuid;
|
$finalSearchImageUuid = $pageImageUuid;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 4. FALLBACK (tl_settings)
|
// 4) FALLBACK (tl_settings)
|
||||||
if ($finalSearchImageUuid === null) {
|
if ($finalSearchImageUuid === null) {
|
||||||
$fallback = Config::get('meilisearch_fallback_image');
|
$fallback = Config::get('meilisearch_fallback_image');
|
||||||
if ($fallback) {
|
if ($fallback) {
|
||||||
@@ -146,6 +158,7 @@ class MeilisearchPageMarkerListener
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($finalSearchImageUuid !== null) {
|
if ($finalSearchImageUuid !== null) {
|
||||||
|
$data['page'] ??= [];
|
||||||
$data['page']['searchimage'] = $finalSearchImageUuid;
|
$data['page']['searchimage'] = $finalSearchImageUuid;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -153,19 +166,47 @@ class MeilisearchPageMarkerListener
|
|||||||
return $buffer;
|
return $buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* =====================
|
||||||
|
* WICHTIG: META-TEXT, damit sich die Contao-Checksum ändert
|
||||||
|
* =====================
|
||||||
|
* Kommentar allein zählt oft nicht in die Checksum rein.
|
||||||
|
* Darum zusätzlich ein unsichtbares Text-Fragment in den Body schreiben.
|
||||||
|
*/
|
||||||
|
$metaParts = [];
|
||||||
|
|
||||||
|
if (isset($data['page']['priority'])) {
|
||||||
|
$metaParts[] = 'priority=' . (int) $data['page']['priority'];
|
||||||
|
}
|
||||||
|
if (!empty($data['page']['keywords'])) {
|
||||||
|
$metaParts[] = 'keywords=' . (string) $data['page']['keywords'];
|
||||||
|
}
|
||||||
|
if (!empty($data['page']['searchimage'])) {
|
||||||
|
$metaParts[] = 'searchimage=' . (string) $data['page']['searchimage'];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Wenn gar nichts da ist, trotzdem stabiler Marker (damit du später erweitern kannst)
|
||||||
|
$metaText = 'MEILISEARCH_META ' . ($metaParts ? implode(' | ', $metaParts) : 'present');
|
||||||
|
|
||||||
|
$hiddenMeta =
|
||||||
|
"\n<span class=\"meilisearch-meta\" style=\"display:none !important\">" .
|
||||||
|
htmlspecialchars($metaText, ENT_QUOTES) .
|
||||||
|
"</span>\n";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* =====================
|
* =====================
|
||||||
* MARKER AUSGEBEN
|
* MARKER AUSGEBEN
|
||||||
* =====================
|
* =====================
|
||||||
*/
|
*/
|
||||||
$marker =
|
$marker =
|
||||||
"\n<!--\n" .
|
"\n<!--\nMEILISEARCH_JSON\n" .
|
||||||
"MEILISEARCH_JSON\n" .
|
|
||||||
json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) .
|
json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) .
|
||||||
"\n-->\n";
|
"\n-->\n";
|
||||||
|
|
||||||
|
$injection = $hiddenMeta . $marker;
|
||||||
|
|
||||||
return str_contains($buffer, '</body>')
|
return str_contains($buffer, '</body>')
|
||||||
? str_replace('</body>', $marker . '</body>', $buffer)
|
? str_replace('</body>', $injection . '</body>', $buffer)
|
||||||
: $buffer . $marker;
|
: $buffer . $injection;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user