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.

1 „Gefällt mir“

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

2 „Gefällt mir“

@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));
        }
     }