Eine Variable aus Plugin ins Theme weiterlaiten

Hab leider nichts dazu in der Doku gefunden, hab nur ein Code fuer Shopware 5 gefunden:

$event->getSubject()->View()->assign('mytestvar', '3456');

aber das funzt in Shopware 6 nicht.

Kann mich jemand auf den richtigen Weg weisen? :slight_smile:

Danke

Wäre das nicht folgendes: ? 

$event->setParameter('foo', 'bar');

 

Denke nicht

    public function onProductsLoaded(EntityLoadedEvent $event)
    {
    	$event->setParameter('foo', 'bar');
    }

Das passiert wenn ich die Zeile reintue.

Dieses Tutorial deckt alles ab, was du brauchst :wink:

  • Event-Listener registrieren

  • Daten aus der DB holen 

  • Ans Frontend durchgeben

  • Im Frontend-Template ausgeben

https://docs.shopware.com/en/shopware-platform-dev-en/how-to/add-data-to-a-storefront-page

 

Kann ich leider nicht bestätigen!

Wenn ich das Tutorial-Plugin installiere, geht auf der Frontend-Seite gar nichts mehr - bzw. eine Fehlermeldung wird ausgegeben. Also das original Shopware Tutorials nicht funktionieren finde ich sehr frustrierend und raubt allen interessierten wertvolle Lebenszeit.

Genau, bei mir funzt der Beispiel auch nicht.

Habe es versucht auch selbst zu implementieren, aber Shopware stuertzt ab an dieser Zeile:

    public function onProductsLoaded(EntityLoadedEvent $event)
    {
        $event->getPagelet()->addExtension('mytestvar2', '8745');
    }

Genauer schon hier:

$event->getPagelet();

Habe versucht ein var_export davon zu machen aber stuertzt ab. Gute Nachticht ist das zumindest die Variable $event existiert :D.

Genau, bei mir funzt der Beispiel auch nicht.

Ja, das stimmt, das Beispiel ist noch für die EA Version von Shopware 6 geschrieben. Da haben sich ein paar Dinge beim Abrufen von Daten aus der Datenbank geändert. Das zuweisen von Variablen in Frontend hat sich jedoch nicht verändert. (Hättet ihr das Plugin nicht 1:1 kopiert und nur die Stelle zum Zuweisen von Variablen benutzt, hätte es keinen Crash gegeben Sticking-out-tongue)

Habe es versucht auch selbst zu implementieren, aber Shopware stuertzt ab an dieser Zeile:

public function onProductsLoaded(EntityLoadedEvent $event)
{
$event->getPagelet()->addExtension(‚mytestvar2‘, ‚8745‘);
}

Ich denke mal, dass du kein Pagelet-Event benutzt. Folglich wird der getPagelet-Aufruf fehlschlagen.

Ich habe das Plugin mal gefixed. Pull-Request ist erstellt. Ihr könnt es euch hier vorab herunterladen:
GitHub - simkli/swag-docs-extend-page at sw61compatibility

VG

@BlueZero schrieb:

Genau, bei mir funzt der Beispiel auch nicht.

Habe es versucht auch selbst zu implementieren, aber Shopware stuertzt ab an dieser Zeile:

public function onProductsLoaded(EntityLoadedEvent $event)
{
$event->getPagelet()->addExtension(‚mytestvar2‘, ‚8745‘);
}

Genauer schon hier:

$event->getPagelet();

Habe versucht ein var_export davon zu machen aber stuertzt ab. Gute Nachticht ist das zumindest die Variable $event existiert :D.

Du solltest erst einmal die error aktivieren, damit du auch eine entsprchende Error Meldung bekommst.

->addExtension nimmt zwei Parameter entgegen: 

string $name, ?Struct $extension

Dein zweiter Parameter ist einfach nur ein String, kein Struct - Deshalb wird es nicht funktionieren nehme ich einmal an.

Ich habe das Plugin mal gefixed. Pull-Request ist erstellt. Ihr könnt es euch hier vorab herunterladen:
https://github.com/simkli/swag-docs-extend-page/tree/sw61compatibility

Vielen Dank, ja das funzt.

Ich denke mal, dass du kein Pagelet-Event benutzt. Folglich wird der getPagelet-Aufruf fehlschlagen.

Das ist richtig. Ich benutze hier kein Pagelet, sondern

    public static function getSubscribedEvents()
    {
        return [
           ProductEvents::PRODUCT_LOADED_EVENT => 'onProductsLoaded',
        ];
    }

Wie kann ich die Variable in diesem Fall setzen?

Eigentlich suche ich ein event der beim Darstellen der Top-Navigation getriggert wird, aber hab keine Ahnung wie ich rausfinden kann welche Events ich genutzen kann, deswegen hab ich diese Frage gestellt: https://forum.shopware.com/discussion/66324/gibt-es-eine-liste-von-events-fuer-shopify-6

@BlueZero‍: In deinem Fall kannst du es direct über die ProductEntity machen:

@ShapeAndShift: anstelle von String kannst du die ArrayEntity nehmen. Siehe Beispiel.

    public function onProductsLoaded(EntityLoadedEvent $event): void
    {
        /** @var ProductEntity $product */
        foreach ($event->getEntities() as $product) {
            $product->addExtension('customArray', new ArrayEntity('custom' => 123));
        }
     }