Event: Enlight_Controller_Action_PostDispatchSecure_Backend_Order
Bei diesem Event hängst du dich erstmal generell an den Order Controller, nicht an eine spezifische Action.
Ergo: Dein Code wird für jede Action ausgeführt.
Aushilfe:
public function deinEventListener(Enlight_Event_EventArgs $args)
{
/** @var Shopware_Controllers_Backend_Order $controller */
$controller = $args->getSubject();
$request = $controller->Request();
if ($request->getActionName() !== 'save') {
return;
}
// dein Code hier
}
Du liest dir die gewünschte Action aus und steigst aus, sofern die Action nicht deiner saveAction entspricht. Beachte : Der Code deines Events wird dann nach der originalen Action ausgeführt.
Event: Enlight_Controller_Action_Backend_Order_saveAction
Hier entfällt das “PostDispatchSecure” im Event Namen.
Zu beachten gilt es hier: Dein Event wird vor der originalen Action ausgeführt.
Du hast darüber hinaus die Möglichkeit die anschließende Ausführung der originalen Action zu verhindern, indem du in deinem Event Listener true zurückgibst.
Hilft dir das weiter?
Ich habe das jetzt aus dem Kopf heraus und in Eile runtergetippert, verzeih’ mir also bitte eventuelle (Tipp-)Fehler.
Event: Enlight_Controller_Action_PostDispatchSecure_Backend_Order
Bei diesem Event hängst du dich erstmal generell an den Order Controller, nicht an eine spezifische Action.
Ergo: Dein Code wird für jede Action ausgeführt.
Aushilfe:
public function deinEventListener(Enlight_Event_EventArgs $args)
{
/** @var Shopware_Controllers_Backend_Order $controller */
$controller = $args->getSubject();
$request = $controller->Request();
if ($request->getActionName() !== ‚save‘) {
return;
}
// dein Code hier
}
Du liest dir die gewünschte Action aus und steigst aus, sofern die Action nicht deiner saveAction entspricht. Beachte : Der Code deines Events wird dann nach der originalen Action ausgeführt.
Event: Enlight_Controller_Action_Backend_Order_saveAction
Hier entfällt das „PostDispatchSecure“ im Event Namen.
Zu beachten gilt es hier: Dein Event wird vor der originalen Action ausgeführt.
Du hast darüber hinaus die Möglichkeit die anschließende Ausführung der originalen Action zu verhindern, indem du in deinem Event Listener true zurückgibst.
Hilft dir das weiter?
Ich habe das jetzt aus dem Kopf heraus und in Eile runtergetippert, verzeih’ mir also bitte eventuelle (Tipp-)Fehler.
Gruß,
Patrick
Vielen Dank für die schnelle Antwort. Die zweite Variante funktioniert aber leider nicht :
'onBeforeSaveAction'
];
}
public function OnBeforeSaveOrder(\Enlight_Event_EventArgs $args)
{
mail("hans.schmiodt125.de","Hook ist aktiv","test");
return true;
}
}
Wissen Sie, was die einfachste Möglichkeit ist, eine Ausgabe auf dem Bildschirm zu erzeugen z.B. eine alert box ?
dein Event Listener hat einen anderen Namen als deine tatsächliche Methode.
Dein Listener heißt onBeforeSaveAction , deine tatsächliche Methode heißt jedoch onBeforeSaveOrder.
Dann dürfte es auch einwandfrei laufen!
Eine Alert-Box ist ja erstmal Javascript.
Du kannst schlichtweg ein Echo zusammen mit einem Exit() verbinden - dann musst du dir die Response in der Browser Entwickler-Konsole anschauen.
dein Event Listener hat einen anderen Namen als deine tatsächliche Methode.
Dein Listener heißt onBeforeSaveAction , deine tatsächliche Methode heißt jedoch onBeforeSaveOrder.
Dann dürfte es auch einwandfrei laufen!
Eine Alert-Box ist ja erstmal Javascript.
Du kannst schlichtweg ein Echo zusammen mit einem Exit() verbinden - dann musst du dir die Response in der Browser Entwickler-Konsole anschauen.
echo „meine Ausgabe“;
exit();
Hilft dir das?
Gruß,
Patrick
Habe den Funktionsnamen nun angepasst, allerdings funktioniert es leider trotzdem nicht.
Den Benutzer möchte ich etwas anzeigen, also z.B. eine Box, wo steht „Fehlgeschlagen, es muss der Vorname hinterlegt werden“
Event: Enlight_Controller_Action_PostDispatchSecure_Backend_Order
Bei diesem Event hängst du dich erstmal generell an den Order Controller, nicht an eine spezifische Action.
Ergo: Dein Code wird für jede Action ausgeführt.
Aushilfe:
public function deinEventListener(Enlight_Event_EventArgs $args)
{
/** @var Shopware_Controllers_Backend_Order $controller */
$controller = $args->getSubject();
$request = $controller->Request();
if ($request->getActionName() !== ‚save‘) {
return;
}
// dein Code hier
}
Du liest dir die gewünschte Action aus und steigst aus, sofern die Action nicht deiner saveAction entspricht. Beachte : Der Code deines Events wird dann nach der originalen Action ausgeführt.
Event: Enlight_Controller_Action_Backend_Order_saveAction
Hier entfällt das „PostDispatchSecure“ im Event Namen.
Zu beachten gilt es hier: Dein Event wird vor der originalen Action ausgeführt.
Du hast darüber hinaus die Möglichkeit die anschließende Ausführung der originalen Action zu verhindern, indem du in deinem Event Listener true zurückgibst.
Hilft dir das weiter?
Ich habe das jetzt aus dem Kopf heraus und in Eile runtergetippert, verzeih’ mir also bitte eventuelle (Tipp-)Fehler.
Gruß,
Patrick
Die erste Möglichkeit funktioniert leider auch nicht bei mir, bei mir sieht es derzeit folgendermaßen aus :
"test"
];
}
public function test(\Enlight_Event_EventArgs $args)
{
exit();
}
}
Das ist nur zum testen, er müsste es ja direkt abbrechen.