ich habe ein Plugin geschrieben, der beim Laden des Produktes auf der Detailseite die extensions um eine zusätzliche entity erweitert. Also wenn ich {{ dump(page.product.extensions) }} aufrufe, soll dieser neue Eintrag dort zu finden sein aber nach langem hin und her setze ich mal auf eure Expertise. Hier meine Subscription:
<?php
namespace TestPlugin\Subscriber;
use Shopware\Storefront\Page\Product\ProductPageLoadedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Shopware\Core\Framework\Struct\ArrayEntity;
class ProductPageSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents(): array
{
return [
ProductPageLoadedEvent::class => 'onProductPageLoaded',
];
}
public function onProductPageLoaded(ProductPageLoadedEvent $event): void
{
$product = $event->getPage()->getProduct();
// Hinzufügen der Erweiterung zum Produkt mit einem statischen Wert
$product->addExtension('isInCart', new ArrayEntity(['value' => 1]));
}
}
Im Grunde geht es darum um zu schauen, ob der aufgerufene Artikel bereits im Warenkorb ist. Aber ich bekomme nicht mal die Variable isInCart in den extensions gesetzt. Woran könnte das liegen.
Saludos Capitan,
geht es darum wirklich zu testen ob das Produkt im Warenkorb liegt, dann wäre das Vorgehen zumindest mal schräg. Hierzu gibt es ja defakto einen Weg.
vielen Dank für deine Beteiligung. In erster Linie wollte ich ja eigentlich probieren, eine eigene Variable in die extensions zu schreiben, da komme ich bei einem anderen Projekt schon nicht weiter. Wie sähe denn der defacto Weg aus, um zu schauen, ob das Produkt bereits im Warenkorb aus?
vielen Dank aber die return Anweisung hat auch nicht geholfen. Versuche mal deinen Vorschlag umzusetzen. Unabhängig davon, warum wird trotzdem nichts in die product.extensions geschrieben? Habe da einiges ausprobiert aber ohne Erfolg.
komme jetzt erst zum Antworten.
Ich habe im Template den dump(page.product) dauerhaft drin. isInCart ist unter page.product.extensions nicht zu finden. Welches Problem sollte mir denn auffallen? Vielleicht bin ich schon Dump-Blind.
In dem anderen Fall versuche ich ähnliches. Da geht es darum die hinterlegten Tags für Bilder in die extensions des Media-Objekts zu laden aber auch ohne Erfolg. Ich werde noch wahnsinnig.
Gehen wir nochmal kurz zurück. Deine ProductPageSubscriber Class wird geladen und auch das Event wird aufgerufen ? Wo arbeitest Du, lokal (mit dev) oder im Produktions-System ?
ich arbeite lokal mit dev. Soweit ich weiß, wird die ProductPageSubscriber geladen. Ich kann gerne eine Debug-Ausgabe generieren. Das kann ich allerdings erst am Montag, weil ich das WE im Urlaub bin.
habe mal ein ein minimales Setup geschrieben aber ohne Erfolg. Es scheint so, dass tatsächlich der Subscriber nicht geladen wird. Die beiden Debug-Ausgaben sind nicht zu sehen.
<?php
namespace TestPlugin\Subscriber;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\RequestEvent;
class ProductPageSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents(): array
{
return [
ProductPageLoadedEvent::class => 'onProductPageLoaded',
];
}
public function onProductPageLoaded(ProductPageLoadedEvent $event): void
{
// Ausgabe von Debug-Informationen in die Browser-Konsole
echo "<script>console.log('ProductPageLoadedEvent triggered');</script>";
// Ausgabe von Debug-Informationen direkt im HTML
echo "<pre>ProductPageLoadedEvent triggered</pre>";
}
}
Habe das Plugin deinstalliert, plugin:refresh durchgeführt wieder installiert etc… Alles ohne Probleme aber auch ohne Funktion . Was übersehe ich hier?
und auf den ersten Blick sehe ich auch nichts. Vielleicht mal mit error_log in eine Datei schreiben. Die „echo’s“ werden evtl. mit dem output-buffer rausgefiltert.
Beim Service reicht das id-attribute. Die class=‚‘ braucht es nicht; aber vielleicht stört das ja ?
die services.xml liegt im Plugin-Ordner unter Resources/config drin. Dein class-Eintrag hatte ich vorhin auch rausgenommen gehabt aber ohne Erfolg. In früheren SW6-Plugins hatte ich die debug-Ausgaben ähnlich z.B. mit print_r etc. ausgegeben. Das hatte auch funktioniert. Versuche die Debug-Ausgabe in die dev.log zu schreiben aber steht auch nichts drin. Das ist echt ein Fu…Up. Muss meine Birne mal neu sortieren.
Vielen Dank für deinen Support. Ich versuche es heute Abend einfach weiter.
Immer auch auf die richtige Schreibweise achten, also „Resources“ mit einem s vorne und einem hinten.
Ich hatte mal die Situation (war ähnlich) und dann war am Ende das Plugin einfach nicht aktiv Vielleicht hilft das ja ?
Jedoch hier nochmal der Hinweis, dass das hier im Moment der falsche Ansatz ist. Die Produkt-Pages liegen im Cache und alles was Hardcoded im Twig-Template steht, landet auch im Cache.
vielen Dank für deine Beteiligung. Ich kann deine Antwort derzeit noch nicht ganz entschlüsseln. Ich möchte ja nur schauen ob meine Subscriber-Klasse überhaupt geladen wird. Wie würde denn ein anderer Ansatz aussehen?
Ich nehme Du beziehst dich auf den ursprünglichen Post, um zu schauen, ob das Produkt bereits im Warenkorb ist. Ich kann das gerne als Widget ausprobieren. Daran hatte ich nicht gedacht. Aber was mich immer noch wurmt, warum wird meine Subscriber-Klasse nicht geladen? Bin auch dank tatkräftiger Hilfe von chamaw hier nicht leider nicht voran gekommen.
jetzt funzt es. Es war nicht die Schreibweise sondern die Verzeichnisstruktur. Hatte es 100 mal geprüft und lag 100 mal daneben. WTH. Jetzt klappt es auch mit den Debug-Ausgaben usw…