Hooks vs. Events

hallo

ich möchte gern das event abfangen wenn der user ein rechnungs-pdf in der bestellung erstellt d.h. ich hätte dann auch gern die daten von der rechnung bzw. dem dokument an sich …

soweit so gut

**public function** install() { _/\* $this-\>subscribeEvent(_ _'Enlight\_Controller\_Action\_Backend\_Order\_createDocument', \<\< funktioniert nur bekomme ich keine daten_ _'getBackendController'_ _);\*/_ _// initDocument($orderID, $documentID, array $config = array())_ $this-\>subscribeEvent( **'Shopware\_Components\_Document::initDocument::before'** , \<\< wird nicht gefeuert **'beforeCreateDocument'** ); **return true** ; }

 

mach ich das ganze über controller events wird das ganze beim drücken des buttons gefeuert - aber die args sind leer soweit ich das sagen kann!

über einen hook beim dokument init wird das ganz gleich gar nicht ausgelöst obwohl die klasse hookable wäre - soweit ich das gesehen habe.

 

jemand eine idee dazu?

 

lg andreas

Hi,

ich fürchte bei dem Call liegt es daran, dass es statisch ist. Da greift der Hook-Proxy nicht.

Ansonsten geht vermutlich auch ein Pre- bzw. PostDispatch-Event auf \Shopware_Controllers_Backend_Order::createDocumentAction - da bekommst du über die $args->getSubject()->Request() die OrderID und den DocumentType und über $args->getSubject()->View()->getAssign() die zurück gegebenen Daten. 

Daniel

1 „Gefällt mir“

hallo daniel, danke dir! das probier ich sofort aus! lg andreas

 danke nochmal daniel, so funktioniert es tatsächlich - komisch den ansatz hatte ich bereits nur kam nichts zurück - allerdings kann es sein das man nicht nur den cache löschen sondern das plugin wirklich neu installieren muss und dann die änderungen erst wirksam werden! danke nochmal! $this-\>subscribeEvent( **'Enlight\_Controller\_Action\_Backend\_Order\_createDocument'** , **'onDocumentCreate'** );

 

**public function**  **onDocumentCreate** (Enlight\_Event\_EventArgs $arguments) { $subject = $arguments-\>getSubject(); $request = $ subject -\>Request(); $request-\>get( **"orderId"** ); $request-\>get( **"documentType"** ); } 

 

 

@azeiner schrieb:

danke nochmal daniel, so funktioniert es tatsächlich - komisch den ansatz hatte ich bereits nur kam nichts zurück - allerdings kann es sein das man nicht nur den cache löschen sondern das plugin wirklich neu installieren muss und dann die änderungen erst wirksam werden! danke nochmal! $this->subscribeEvent( ‚Enlight_Controller_Action_Backend_Order_createDocument‘ , ‚onDocumentCreate‘ );

 

public function onDocumentCreate (Enlight_Event_EventArgs $arguments) { $subject = $arguments->getSubject(); $request = $ subject ->Request(); $request->get( „orderId“ ); $request->get( „documentType“ ); }

Hallo,

es ist doch aber klar, wenn du in der install-Methode etwas änderst, das die Änderung nur beim (neu-)installieren wirksam werden können. Vor allem wenn du ein völlig anderes Event oder Hook ansprichst.

Beste Grüße

Sebastian

1 „Gefällt mir“

@sschreier schrieb:

@azeiner schrieb:

danke nochmal daniel, so funktioniert es tatsächlich - komisch den ansatz hatte ich bereits nur kam nichts zurück - allerdings kann es sein das man nicht nur den cache löschen sondern das plugin wirklich neu installieren muss und dann die änderungen erst wirksam werden! danke nochmal! $this->subscribeEvent( ‚Enlight_Controller_Action_Backend_Order_createDocument‘ , ‚onDocumentCreate‘ );

 

public function onDocumentCreate (Enlight_Event_EventArgs $arguments) { $subject = $arguments->getSubject(); $request = $ subject ->Request(); $request->get( „orderId“ ); $request->get( „documentType“ ); }

Hallo,

es ist doch aber klar, wenn du in der install-Methode etwas änderst, das die Änderung nur beim (neu-)installieren wirksam werden können. Vor allem wenn du ein völlig anderes Event oder Hook ansprichst.

Beste Grüße

Sebastian

hi sebastian

ja das weiß ich jetzt auch :slight_smile: bei allen anderen teilen war es mit cache löschen erledig! anyhow - es funktioniert so wie es soll :slight_smile: danke auf jedenfall!

lg andreas