Event für Finish Checkout

Hallo,

auf welchen Event leg ich denn am besten einen Listener in meinem Plugin, um einen Kaufabschluss mitzukriegen, wobei ich im Callback Zugriff auf den Order habe und sodann im Template frontend\checkout\finish.tpl je nach Kunde einen bestimmten Block anders gestalten kann?

Enlight_Controller_Action_PreDispatchSecure_Frontend_Checkout und Enlight_Controller_Action_PostDispatchSecure_Frontend_Checkout reagieren nicht.

Auch wüsste ich gerne, wie ich im EventArgs Parameter an die orderId bzw. orderNumber gelange.

Vielen Dank.

Als Event für den Kaufabschluss eigent sich am besten, welches ich in folgendem Thread erwähnt habe: 18 days ago

Am besten “flagst” du die Bestellung über ein Attribut(=Freitextfeld) in der s_order_attributes. Und im Enlight_Controller_Action_PostDispatchSecure_Frontend_Checkout_Finish sollte dir dann auch die Attribute zur Verfügung stehen, sodass du dort dann das Template manipulierst.

Viele Grüße

1 Like

Im anderen Thread empfiehlst Du aber den Einsatz von Shopware_Modules_Order_SaveOrder_ProcessDetails. Diesen Event kann ich tatsächlich abfangen, aber keine Template Änderungen vornehmen.

In der install() Funktion meines Plugins habe ich 2 subscribeEvents: Shopware_Modules_Order_SaveOrder_ProcessDetails und Enlight_Controller_Action_PostDispatchSecure_Frontend_Checkout_Finish, wobei der zweite scheinbar bei einem Kaufabschluss nicht aufgerufen wird.

    public function install()
    {
		# this event will be used after saving the order in the database
        $this->subscribeEvent(
            'Shopware_Modules_Order_SaveOrder_ProcessDetails',
            'onSaveOrder'
        );

		$this->subscribeEvent(
            'Enlight_Controller_Action_PostDispatchSecure_Frontend_Checkout_Finish',
            'onFrontendOrderPostDispatchFinish'
        );
        
        return true;
    }

 

	public function onFrontendOrderPostDispatchFinish(Enlight_Event_EventArgs $args)
	{
	    $subject = $args->get('subject');
		
	    $request = $subject->Request();
	    $action = $request->getActionName();
		$view = $subject->View();
		
		$view->addTemplateDir(
	        __DIR__. '/Views'
	    );
		
		if ($action === 'finish') {
			$orderId = $args['orderID'];
			if ($this->isPostOrder($orderID)) {
				# now we have to exchange the text content
				$view->assign('isPostOrder', true);
			}
		}
	}	

 

  1. Kann ich in der install() Funktion mehrere subscribeEvents() aufführen?
  2. Wieso wird onFrontendOrderPostDispatchFinish() nicht aufgerufen nach einem Kaufabschluss?
  3. Kann ich das assignment der Variable ‘isPostOrder’ in dieser Listener Funktion so machen, damit die erweiterte finish.tpl dies abfragen kann?

oder…

Shopware_Controllers_Frontend_Checkout::finishAction::before

 

Ok ich blicke da echt noch nicht durch… Den Event Enlight_Controller_Action_PostDispatchSecure_Frontend_Checkout kann ich abfangen und prüfe im Callback auf die Action.

Wo sehe ich denn nun, welche Attribute mir im EventArgs Objekt des Callbacks zur Verfügung stehen? Ich bräuchte die Id der soeben angelegten Bestellung in der Datenbank.

Übersehe ich hier irgendwas oder ist das tatsächlich ziemlich unübersichtlich, wie man an solche Infos kommt?

Suchst du das?

$this->session = Shopware()->Session();
$sOrderVariables = $this->session[‚sOrderVariables‘]->getArrayCopy()

 

2 Likes

Bingo, da kann ich die sOrderNumber herausfischen und damit hab ich auch den Order. Vielen Dank.

Den F5 Klick muss ich aber schon nach abfangen, denke ich. Dafür kommt dann wohl das von simkli vorgeschlagene Flag zum Zuge.