Fast am Ziel

Jetzt fehlt nur noch das Verschicken der E-Mails an die Distributoren. Dabei hilft ein Event-Observer. Events sind in Hooks, an denen eigener Code ausgeführt werden kann. Diese sollten Sie, wenn möglich, dem Erweitern von Core-Klassen vorziehen. Leider stehen sie nicht immer zur Verfügung, wenn sie gebraucht werden. Fangen Sie wieder in der Datei „config.xml“ an.

Direkt nach </global> einfügen:

<frontend>
	<events>
		<checkout_type_onepage_save_order_after>
			<observers>
				<OrderSplitter>
					<type>singleton</type>
					<class>OrderSplitter/observer</class>
					<method>checkoutTypeOnepageSaveOrderAfter</method>
				</OrderSplitter>
			</observers>
		</checkout_type_onepage_save_order_after>
	</events>
</frontend>

Listing 8

Eine Excel-Datei mit einer (fast vollständigen) Liste aller Events finden Sie im Magento-Wiki [1]. Um Ihr Modul zu vollenden, braucht es noch die Observer-Klasse:

Die Datei „Model/Observer.php“ im Modulverzeichnis

<?php
class T3nBsp_OrderSplitter_Model_Observer {
	public function checkoutTypeOnepageSaveOrderAfter($observer) {
		// Übergebenes Quote und Order Objekt holen
		$order = $observer->getEvent()->getOrder();
		$quote = $observer->getEvent()->getQuote();

		// Nur schicken wenn tatsächlich eine Adresse zugewiesen wurde
		if ($quote->getDistributorEmail()) {
			// Lieferadresse als Text formatiert holen
			$shipTo = $order->getShippingAddress()->format('text');
			$itemsTxt = "Items\n-----------------------\n";
			foreach ($order->getAllVisibleItems() as $item) {
				$itemsTxt .= 'SKU: ' . $item->getSku() . ' QTY: ' . $item->getQtyOrdered() . "\n";
			}
			$mail = Mage::getModel('core/email')
				->setFromEmail('shop@example.com')
				->setSubject('Neue Bestellung')
				->setToEmail($quote->getDistributorEmail())
				->setBody("Lieferadresse:\n\n" . $shipTo . "\n" . $itemsTxt)
				->send();
		}
	}
}

Listing 9

Damit ist Ihr Modul komplett. Ihm fehlt zwar noch einiges an Sonderfall- und Fehlerbehandlung, kann aber schon jetzt als Grundlage für Ihre ersten eigenen Erweiterungen dienen. Die vorgestellten Techniken bilden die Basis, auf der Sie bei der Magento-Modulprogrammierung aufbauen können.

Seite:  1 2 3 4 5

Weitere Artikel zu Magento, PHP und Open Source

Softlink 2399

Links und Literatur

Das interessiert dich bestimmt auch

14 Antworten

  1. von Christian Conrad 10.03.2010 (14:08Uhr) 1.

    Super Beitrag!!!

    Gerade die Sache mit dem Order Split hat mir eine Herausforderung weniger beschert!

    Vielen Dank und weiter so.

    Christian

  2. von Michael Heyking 26.08.2010 (16:34Uhr) 2.

    Hallo Vinai,

    kann mich nur anschließen - super Beitrag.
    Hat bei 1.3.x super funktioniert.
    Kann es sein das bei 1.4.1.1 es nicht mehr funktioniert ?
    Es kommt nur noch ein popup "undefined".

    Viele Grüße,
    Michael

  3. von Michael Heyking 26.08.2010 (17:23Uhr) 3.

    Hallo Vinai,

    Problem ist gelöst. Deine Anleitung funktioniert nach wie vor perfekt.
    Ich habe den Rechnungsprozess und Lieferprozess übersprungen.
    Das verträgt sich nicht ohne weiteres mit dem Modul.

    Vielleicht hat jemand einen Tip, was in diesem Fall zu tun ist ?

    Viele Grüße,
    Michael

  4. von Mario 27.02.2011 (16:07Uhr) 4.

    hallo,
    ich versuche mich an dem Tutorial mit Magento 1.5 (frisch installiert, einzig Market Ready Germany installiert)
    Leider komme ich nur bis Seite 3/5: Das Feld: 'Distributor Email' taucht einfach nicht auf..
    Davor hat alles noch geklappt und ich habe eigentlich alles genauso gemacht wie beschrieben..
    woran kann das liegen? Inkompatible Version?

  5. von Vinai 11.04.2011 (14:58Uhr) 5.

    Hallo Mario,

    seit Magento 1.4 muss man bei addAttribute() auch das Attribut Set und die Gruppe angeben wenn user_defined auf 1 gesetzt ist, ansonsten musst du das Attribut von Hand im Backend dem Set und einer Gruppe zuweisen.
    Am einfachsten ist es allerdings im Setup Script user_defined auf 0 zu setzen, dann ist das ehemalige Verhalten wieder hergestellt und das Attribut wird automatisch allen Attribut Sets in der General Gruppe hinzugefügt.

    Vinai

  6. von Dieter 28.04.2011 (16:22Uhr) 6.

    Hallo,

    ich nutze Version 1.4.2 und bekomme die Extension nicht zum laufen.
    Wenn ich alles erstellt habe, kommt beim Aufruf des Checkout folgende Fehler Meldung:

    Fatal error: Call to a member function getQuote() on a non-object in Pfad zu Magento\app\code\core\Mage\Checkout\controllers\OnepageController.php on line 151

    Kann mir jemand weiter helfen? Oder die fertige Extension hochladen?

    Danke

    Dieter

  7. von Vinai 29.04.2011 (13:56Uhr) 7.

    Hallo Dieter,

    ich denke Du hast einen Fehler in der Klasse T3nBsp_OrderSplitter_Model_Checkout_Type_Onepage. Entweder einen PHP Syntax Fehler (PHP Error log checken?), oder vielleicht extended deine Klasse nicht Mage_Checkout_Model_Type_Onepage.

    Viele Grüße,
    Vinai

  8. von Dieter 02.05.2011 (08:01Uhr) 8.

    Hallo Vinai,

    danke dir. Ein kompletter Neustart und es läuft. Wirklich schöne Extension.

    Gruß
    Dieter

  9. von Dieter 06.05.2011 (12:35Uhr) 9.

    Hallo,

    kann es sein, dass die Berechnung der Zwischensumme, Steuern usw für aktuellen Inhalt des Korbes nicht funktioniert?
    Also: $this->getQuote()->collectTotals();

    Gruß
    Dieter

  10. von Vinai 06.05.2011 (12:53Uhr) 10.

    Hallo Dieter,

    in der aktuellen Version sollte das so aussehen:
    $this->getQuote()->setTotalsCollectedFlag(false)->collectTotals();

  11. von Dieter 09.05.2011 (10:01Uhr) 11.

    Hallo Vinai,

    ich nutze die Version 1.4.2, deine Lösung ist wohl für 1.5, denn leider funktioniert es nicht.
    Scheinbar wird die Funktion nicht aufgerufen, ich habe in app/code/core/Mage/Sales/Model/Quote.php mal ein Mage::log Eintrag eingefügt und dieser wird nicht nach dem zusammenstellen der einzelnen Warenkörbe aufgerufen.
    Hast du eine Idee?
    Danke für deine Hilfe.

    Gruß
    Dieter

  12. von Vinai 09.05.2011 (15:48Uhr) 12.

    Hall Dieter,

    das $this->getQuote()->setTotalsCollectedFlag(false)->collectTotals(); passt auch für Magento in der Version 1.4.2 (vergleiche Zeile 946 in der Datei app/code/core/Mage/Sales/Model/Quote.php).
    Es geht in Deinem Code um die Zeile zum Berechnen der Zwischensumme, Steuern usw für den aktuellen Inhalt des Korbes.

    Viele Grüße,
    Vinai

  13. von Dieter 13.05.2011 (09:11Uhr) 13.

    Habe es leider bisher nicht zum laufen gebracht.
    Ich werde demnächst mal eine neue Installation aufsetzen und schauen ob ich es dort hin bekomme
    Danke für deine Hilfe Vinai.

  14. von Mrs_Byte 07.03.2012 (12:25Uhr) 14.

    Hallo,

    funktioniert diese Lösung auch für 1.6.1.1 und höher?

    Danke

Deine Meinung


(wird nicht veröffentlicht)