Kleine Debugging-Hilfe, um die JSON-Metadaten der Suchergebnisse zur Weiterverarbeitung auszulesen (getestet mit Contao 5.4.12):
Im Template search_default.html5:
Die Meta-Daten des (einzelnen) Suchergebnisses in eine Variable speichern:
PHP-Code:
$result_meta = json_decode($this->meta);
Den kompletten Meta-Array zum Debuggen formatiert ausgeben:
PHP-Code:
echo '<pre>';
print_r($result_meta);
echo '</pre>';
IDs ermitteln:
// EDIT: Die Reihenfolge und Anzahl der Einträge innerhalb des Meta-JSON-Objektes kann variieren.
Die IDs der Seiten, News und Events können z.B. mit einer foreach-Schleife ausgelesen und in Variablen gespeichert werden:
PHP-Code:
foreach ( $result_meta as $meta_node ) {
if ( isset($meta_node->{'@type'}) ) {
// Bei regulären Seiten:
// (kann auch die ID der Seite mit dem Event-/News-Reader sein)
if ( $meta_node->{'@type'} == 'https://schema.contao.org/Page' ) {
if ( isset($meta_node->{'https://schema.contao.org/pageId'}) ) {
$page_id = $meta_node->{'https://schema.contao.org/pageId'};
// Weitere bereits verfügbare Meta-Angaben:
// $meta_node->{'https://schema.contao.org/title'};
}
}
// Bei Nachrichten:
else if ( $meta_node->{'@type'} == 'https://schema.org/NewsArticle' ) {
if ( isset($meta_node->{'@id'}) ) {
// News-ID-String hat Format '#/schema/news/123'; Anfang entfernen:
$news_id = substr($meta_node->{'@id'}, 14);
// Weitere bereits verfügbare Meta-Angaben:
// $meta_node->{'https://schema.org/datePublished'};
// $meta_node->{'https://schema.org/description'};
// $meta_node->{'https://schema.org/headline'};
// $meta_node->{'https://schema.org/url'};
// sowie der Autor als Array in $meta_node->{'https://schema.org/author'}
// News-Artikeldetails abrufen:
$news = \Contao\NewsModel::findById($news_id);
}
}
// Bei Events:
else if ( $meta_node->{'@type'} == 'https://schema.org/Event' ) {
if ( isset($meta_node->{'@id'}) ) {
// Event-ID-String hat Format '#/schema/events/123'; Anfang entfernen:
$event_id = substr($meta_node->{'@id'}, 16);
// Weitere bereits verfügbare Meta-Angaben:
// $meta_node->{'https://schema.org/description'};
// $meta_node->{'https://schema.org/startDate'};
// $meta_node->{'https://schema.org/endDate'};
// $meta_node->{'https://schema.org/url'};
// sowie ggf. weitere, siehe print_r($meta_node);
// Event-Artikeldetails abrufen:
$event = \Contao\CalendarEventsModel::findById($event_id);
}
}
// Breadcrumb zur jeweiligen Seite, falls benötigt
// (nur vorhanden, wenn das Breadcrumb-Modul auf der jeweiligen Seite eingebunden ist):
else if ( $meta_node->{'@type'} == 'https://schema.org/BreadcrumbList' ) {
if ( isset($meta_node->{'https://schema.org/itemListElement'}) ) {
$breadcrumb = $meta_node->{'https://schema.org/itemListElement'};
// Falls Anzahl der Breadcrumb-Elemente benötigt:
$breadcrumb_count = count((array)$breadcrumb);
}
}
}
}
Danach kann geprüft werden, ob die Variablen $news_id oder $event_id vorhanden/gesetzt sind und Infos von $news oder $event können weiterverarbeitet/ausgegeben werden.
Falls $news_id und $event_id nicht gesetzt/vorhanden sind, handelt es sich ggf. um eine reguläre Seite.
Die Breadcrumb-Info sind nur vorhanden, wenn das Breadcrumb-Modul auf der jeweiligen Seite eingebunden ist.