Ich versuche ein erstes Shopware 6 Plugin zu erstellen.
Ich stoße auf folgendes Problem: Wenn ich subscribe zum NavigationPageLoadedEvent, wie kann ich die geladenen Produkte in meinem Subscriber erreichen?
Das $event scheint alle Daten einzubetten. Muss ich sie irgendwie aus dem $event holen oder gibt es einen anderen Weg?
public function onNavigationPageLoaded(NavigationPageLoadedEvent $event) : void
{
// get Loaded articles.. HOW?
}
Für Shopware 5 war es eine Option, die Daten aus der Ansicht abzurufen:
$controller = $args->getSubject();
$view = $controller->View();
/* Get current article */
$sArticle = $view->getAssign('sArticle');
Ich habe ausgiebig versucht, das Event zu debuggen, und am Ende ist es möglich, die Produkte aus dem Event abzurufen.
Aber es scheint nicht der richtige Weg zu sein.
Oder gibt es keine Alternative?
$elements = $event->getPage()->getCmsPage()->getBlocks()->getElements();
foreach ($elements as $element)
{
if ($element->getType() == 'product-listing')
//... continue
}
Was ich erreichen möchte, ist das folgende:
Ich möchte einen Google Datalayer hinzufügen, für den Artikelinformationen erforderlich sind.
Ich habe bereits eine Komponente eingerichtet, die den Google Datalayer schreibt.
Diese Komponente wird innerhalb des Subscriber ausgelöst. Die Komponente benötigt jedoch alle Produktinformationen, die auf der Lising-Seite (Navigationsseite) geladen sind.
Dafur brauche ich ein array aller geladenen Produkte, die ich an die Google Datalayer-Komponente senden kann.
Was ist der beste Weg, um dieses Array zu bekommen?
Ich habe immer noch Probleme damit, die Produktdaten zu bekommen.
Vielleicht muss ich ein bisschen mehr erklären, was ich erreichen möchte:
Auf der Listingseite benötige ich die bereits geladenen Produktdaten. Diese Daten werden benötigt, um einen Tagmanager-Datenlayer zu erstellen, der im Frontend angezeigt wird.
Dafür subscribe ich auf das NavigationPageLoadedEvent, bei dem die Daten in das Frontend geladen werden müssen. Da die Produktdaten bereits geladen sind, möchte ich das nicht noch einmal tun. Ich bin immer noch verwirrt, wie ich diese Produktdaten im Subscriber erhalten kann.
NULL wodurch ->getListing() natürlich nicht mehr funktioniert. Ich habe aktuell noch keine Idee warum das so ist. Gibt es mittlerweile einen besseren Lösungsansatz als hier beschrieben?
Ich müsste die Produkte mit zusätzlichen Attributen anreichern um auf diese im Template reagieren zu können. Ich habe das wie folgt probiert jedoch sehe ich das Attribut in nicht wenn ich mir die Produkte loggen lasse: