Du hast deinen AdBlocker an?

Es wäre ein Traum, wenn du ihn für t3n.de deaktivierst. Wir zeigen dir gerne, wie das geht. Und natürlich erklären wir dir auch, warum uns das so wichtig ist. Digitales High-five, deine t3n-Redaktion

t3n 17

Magento-Erweiterungen im Eigenbau: Module für das Open-Source-Shop-System programmieren

Magento wird gerne für seine Erweiterbarkeit und Flexibilität gelobt. Doch mit der Flexibilität geht auch Komplexität einher. Vielen Entwicklern fällt daher trotz reichlich PHP-Erfahrung der Einstieg schwer. Informationen müssen aus Foren, Blogs und Wikis zusammengesucht werden, komplette Dokumentationen sind immer noch selten. Dieser Workshop zeigt, wie die ersten Schritte gelingen und eine erste eigene Extension entsteht.

Bestellungen nach Produkt-Lieferanten aufteilen und sie an diese weiterleiten – eine Funktionalität, die in vielen Magento-Projekten benötigt wird. Dieser Workshop nimmt sich des Themas an und zeigt exemplarisch, wie sich solch eine Funktion als Extension abbilden lässt. Folgende Schritte werden dabei behandelt:

  • Erweiterung anlegen
  • Modul-Installations-Skripte erstellen
  • Modelle aus dem Magento-Core erweitern
  • Event-Observer benutzen

Der Begriff „Modul“ wird im Artikel synonym zu „Erweiterung“ genutzt, auch wenn genau genommen nicht jede Erweiterung ein eigenes Modul ist.

Wie fange ich an?

Zuerst müssen Sie drei Entscheidungen treffen:

  1. Soll die Erweiterung nur für das aktuelle Projekt dienen oder wollen Sie sie veröffentlichen? Die Antwort entscheidet über das Verzeichnis, in dem die Erweiterung angelegt wird. Lokale Module (wie in diesem Artikel) liegen in „app/code/local“, Module, die Sie veröffentlichen wollen, in „app/code/community“.
  2. Welchen Namensraum („Namespace“) wollen Sie verwenden? Der Namespace dient der Vermeidung von Konflikten zwischen Modulen und ist nichts weiter als der Name des Verzeichnisses, in dem Sie Ihre Module sammeln. Der Name sollte nicht zu lang sein, da er häufig getippt werden muss. Außerdem muss der erste Buchstabe groß geschrieben sein. Überhaupt lohnt es sich bei Magento-Modulen immer peinlich genau auf eine konsistente Groß-/Kleinschreibung zu achten. Für die Beispielanwendung benutzen Sie den Namespace „T3nBsp“.
  3. Wie soll das Modul heißen? Am besten sind kurze Namen, die etwas über das Modul aussagen. Auch hier muss der erste Buchstabe groß geschrieben werden. Für das Beispiel wurde „OrderSplitter“ gewählt.

Bitte beachte unsere Community-Richtlinien

14 Reaktionen
Mrs_Byte

Hallo,

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

Danke

Dieter

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.

Vinai

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

Dieter

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

Vinai

Hallo Dieter,

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

Dieter

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

Dieter

Hallo Vinai,

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

Gruß
Dieter

Vinai

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

Dieter

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

Vinai

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

Mario

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?

Michael Heyking

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

Michael Heyking

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

Christian Conrad

Super Beitrag!!!

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

Vielen Dank und weiter so.

Christian

Du musst angemeldet sein, um einen Kommentar schreiben zu können.

Jetzt anmelden

Finde einen Job, den du liebst