Ich habe eine Erweiterung für die Produktregistrierung, die ein Ereignis nach dem Speichern der Registrierung auslöst. Eine andere Erweiterung verwendet dieses Ereignis, um einen Gutschein für ein virtuelles Produkt zu generieren, wenn es sich auf das registrierte Produkt bezieht.
Ich muss Daten über den generierten Coupon abrufen, um sie zusammen mit den Details ihrer Produktregistrierung an den Nutzer zu senden.
Gibt es eine Möglichkeit, Daten vom Beobachter an den Ort zurückzugeben, an dem das Ereignis ausgelöst wurde?
Es gibt einen Trick in Magento für Ihren Zweck. Da Sie Ereignisdaten wie Produkt oder Kategoriemodell an die Beobachter übergeben können, ist es auch möglich, einen Container zu erstellen, aus dem Sie diese Daten abrufen können.
Solche Aktionen können beispielsweise im Dispatcher ausgeführt werden:
%Vor%Und eine Beobachtermethode kann wie folgt aussehen:
%Vor%Genießen und Spaß haben!
Nein, dafür ist nichts im System integriert. Die Magento-Konvention erstellt ein stdClass
oder Varien_Object
-Transportobjekt.
Sehen Sie sich den Blockereigniscode an
%Vor% Da self::$_transportObject
ein Objekt ist und PHP-Objekte sich in einer referenzähnlichen Weise verhalten, werden alle Änderungen am Transportobjekt in einem Beobachter beibehalten. Also, im obigen Beispiel, wenn ein Beobachter Entwickler sagte
Die Sicherung im Systemblockcode self::$_transportObject
würde den neuen HTML-Code enthalten. Denken Sie daran, dass mehrere Beobachter die Möglichkeit haben, diesen Wert zu ändern, und die Auftragsbeobachter in Magento werden für jedes konfigurierte System unterschiedlich sein.
Ein zweiter Ansatz, den Sie verwenden könnten, ist die Verwendung des Magento-Registrierungsmusters. Registrieren Sie eine Variable vor dem dispatchEvent