Events in Magento: Export bei neuer Bestellung

Magento beinhaltet ein mächtiges Event-Management-Werkzeug mit dem es möglich ist ein Event auszulösen oder auch informiert zu werden sobald ein bestimmtes Event eintritt.

In unserem Fall soll jede eingegange Bestellung automatisch per Email exportiert werden. Dazu erstellen wir im Anfang ein kleines Modul mit dem Namen Webguys_Export. Dieses enthält ein Model das dann eine Bestellung per E-Mail in einem bestimmten Format verschickt.

Erstmal brauchen wir unsere XML-Datei Webguys_Export.xml in app/etc/modules die unser Modul aktiviert:

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <modules>
        <Webguys_Export>
            <active>true</active>
            <codePool>local</codePool>
            <depends>
                <Mage_Checkout />
            </depends>
        </Webguys_Export>
    </modules>
</config>

Danach müssen wir Magento mitteilen das unser Event mit dem Namen "checkout_type_onepage_save_order" abgefangen werden soll bzw. das dort etwas zusätzlich passiert. Das können wir durch die app/local/Webguys/Export/etc/config.xml veranlassen die dort ungefähr wie folgt aufgebaut ist:

<config>

	<global>

	   <events>
	        <checkout_type_onepage_save_order>
	            <observers>
	                <webguys_export_order_observer>
	                    <type>singleton</type>
	                    <class>Webguys_Export_Model_Observer</class>
	                    <method>mailExport</method>
	                </webguys_export_order_observer>
	            </observers>
	        </checkout_type_onepage_save_order>
	    </events>

	</global>

</config>

Nun würde in der Class Webguys_Export_Model_Observer die Funktion mailExport aufgerufen. Einziges Problem: Die Classe gibt es noch nicht. Dem können wir aber leicht Abhilfe schaffen indem wir die Datei app/local/Webguys/Export/Model/Observer.php erstellen und wie folgt befüllen:

<?php
class Webguys_Export_Model_Observer {

	public function mailExport( $event ) {
		$order = $event->getOrder();

		// Some Magic
		// mail('tobi@webguys.de', 'Test', $order->getId() );

	}

}

Das war es schon. Natürlich ist die E-Mail noch mit den richtigen Infos aufzubauen und letztlich an den richtigen Empfänger zuzustellen :) Wenn übrigens etwas mal nicht klappt lohnt sich ein Blick in die Datei var/log/system.log. Diese enthält viele Informationen was Magento eigentlich tut bzw. wo es Probleme hat. Logging muss natürlich vorher in der Administration aktiviert werden.

Update: Besser ist es noch das Event "checkout_submit_all_after" anstelle von "checkout_type_onepage_save_order" zu verwenden. Bei "checkout_type_onepage_save_order" hatte ich mit der Magento 1.4.1.1 Probleme beim Bestellen des Warenkorbes.

checkout_type_onepage_save_order


Ein Beitrag von Tobias Vogt
Tobias's avatar

Tobias Vogt arbeitet seit 2008 mit Magento und ist seit 2011 durch Magento zertifizierter Entwickler. Beschäftigt ist er bei der code-x GmbH, einer Agentur für Internet und Marketing aus Paderborn. Er gehört zum Gründer-Team der Webguys und ist seit November 2011 Bachelor of Science (Wirtschaftsinformatik). Sie erreichen Ihn per E-Mail unter tobi@webguys.de.

Alle Beiträge von Tobias

Kommentare
Tobias Vogt am

Mh. Ist $order auch eine gültige Bestellung? Klingt irgendwie nicht danach. Mach mal ein Mage::Log( "Bestell-Id".$order->getId() ); und schau dir nachher die Log in var/log/system.log an :)

Antonio am

Hi ich habe eine Frage ich habe dein Script bei der Magento Version 1.5.1.0 ausprobiert. Die Mail wird verschickt jedoch bekomme ich keinen Inhalt bezüglich der bestellung in die Mail !

Weisst Du vieleicht warum ?

Ich habe einfach mal versucht $bestellung = $order->getId(); in die Mail zu packen, doch leider bleibt die Mail leer.

P.S. SUPER BEITRAG :)

Dein Kommentar