Die ersten Schritte zur eigenen Magento-Extension. (c) Cee-Bee auf flickr.comHeute beschäftigen wir uns mit der Grundlage für die Erweiterungen, die ich hier vorstelle, nämlich mit der Frage: wie erstelle ich mein eigenes Modul in Magento? Ihr wundert euch vielleicht, warum ich jetzt damit ankomme, nachdem ich bereits einige komplexere Artikel veröffentlicht habe. Die Antwort: wie ich durch eure Rückmeldungen zu den Entwickler-Tipps erfahren habe, finden immer wieder Magento-Neulinge den Weg zu meinem Blog. Das freut mich, und nachdem ich weiß, dass der Einstieg in Magento verwirrend sein kann, greife ich gerne helfend unter die Arme. ;)

Inhalt

Was sind Extensions / Module?

Zu aller Anfang: der Code von Magento ist in viele Module aufgeteilt, um trotz der vielen Dateien bestmögliche Übersichtlichkeit zu gewährleisten. Häufig werden die Module auch als Extensions bezeichnet (besonders wenn sie nicht direkt mit Magento ausgeliefert werden). Im Normalfall kann man davon ausgehen, dass damit das gleiche gemeint ist. Ich schreibe im Weiteren von Extensions und meine sowohl die Module von Magento als auch Erweiterungen, die man selbst entwickelt bzw. die von Drittanbietern bereitgestellt werden.

Der Name einer Extension setzt sich in der Regel aus zwei Teilen zusammen. Der erste Teil ist das Package. Das Prinzip ist das ähnliche wie bei einem Namespace (nicht mit Namespaces aus PHP 5.3 zu verwechseln): jede Agentur bzw. jeder Entwickler sucht sich einen eindeutigen Namen aus, unter dem sie ihre bzw. er seine Erweiterungen in die Welt trägt. Dadurch vermeidet man Konflikte mit dem Code anderer Entwickler. Magento selbst beansprucht das Package “Mage” für sich.

Der zweite Teil ist der eigentliche Name des Moduls. Er sollte möglichst bezeichnend für das sein, was die Extension tut. Mitgelieferte Module heißen unter anderem CatalogSearch, GiftMessage, Payment oder Widget. Somit wird angezeigt, wofür der jeweilige Code verantwortlich ist.

Den vollständigen Namen der Extension erhält man, indem man die beiden Teile mit einem Unterstrich zusammenführt. Aus den obigen Beispielen werden somit Mage_CatalogSearch, Mage_GiftMessage, Mage_Payment und Mage_Widget.

Wo finde ich die Extensions im Dateisystem?

Die Extensions werden unterhalb des Verzeichnisses app/code/ abgelegt. Werft ihr einen Blick in das Verzeichnis, so findet ihr drei Unterverzeichnisse, welche die 3 Code-Pools von Magento bilden:

  • community: hier legt man selbstentwickelte Extensions ab, wenn man plant, sie der Community (z.B. über Magento Connect) zur Verfügung zu stellen.
  • core: dieser Codepool sollte Magento vorbehalten bleiben.
  • local: hier erstellt man Erweiterungen, wenn sie zu projektspezifisch sind, um wiederverwendet zu werden bzw. wenn die Veröffentlichung der Erweiterung nicht geplant ist.

In der ersten Verzeichnisebene des Code-Pools tummeln sich die Namespaces und im darunterliegenden Verzeichnis die Modulnamen. Das Core-Modul Mage_CatalogSearch findet man daher in app/code/core/Mage/CatalogSearch.

Diese Konvention, laut der Unterstriche im Klassennamen im Dateisystem durch Verzeichnisebenen ersetzt werden, kennen die meisten PHPler übrigens aus PEAR – dessen Modell wurde in das Zend Framework übernommen und auf diesem basiert wiederum Magento.

Was brauche ich für eine eigene Extension?

Eine eigene Extension besteht aus drei Teilen: erstens aus dem Extensionverzeichnis, wie ich es oben beschrieben habe, zweitens aus einer Konfigurationsdatei im Extensionverzeichnis und drittens aus einer Konfigurationsdatei im allgemeinem Konfigurationsverzeichnis.

Das Extensionverzeichnis

Zu Beginn entscheiden man sich, ob die Erweiterung im Code-Pool “local” oder “community” zu finden sein soll. Gehen wir heute von einer lokalen Extension aus. Ich wähle als mein Entwicklerkürzel “Emzee” und möchte eine Erweiterung des Bezahlvorgangs (Checkout) vornehmen. Daraus ergibt sich die lokale Extension Emzee_Checkout. Das dazu korrespondierende Verzeichnis, das wir erstellen müssen, lautet app/code/local/Emzee/Checkout.

Die Konfigurationsdatei der Extension

Innerhalb der Extension muss eine Konfigurationsdatei angelegt werden. Sie bildet die Basis, um Magento auf jegliche erdenkliche Art zu erweitern. Dazu erstellen wir die Datei app/code/local/Emzee/Checkout/etc/config.xml:

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <modules>
        <Emzee_Checkout>
            <version>0.0.1</version>
        </Emzee_Checkout>
    </modules>
</config>

Hierbei handelt es sich um die Minimalversion der Konfigurationsdatei. Sie enthält lediglich den Namen der Extension sowie die aktuelle Versionsnummer. Die Versionsnummer anzugeben und gegebenfalls anzupassen ist wichtig, wenn man die Extension im Laufe der Zeit ausbaut. Dadurch ist es Magento erstens möglich, die Dateien der Extension automatisch auf den aktuellen Stand zu bringen und zweitens kann kann man als Entwickler Migrationsskripte erstellen, falls das Datenbankschema erweitert werden muss. Wird die Extension in einer Magento-Installation aktualisiert, dann werden diese Skripte automatisch ausgeführt.

Die Konfigurationsdatei zur Aktivierung der Extension

Momentan wird die Extension noch nicht von Magento erkannt. Um das zu ändern, muss eine weitere XML-Datei angelegt werden. Hierzu gehen wir in das allgemeine Magento-Konfigurationsverzeichnis app/etc/. Hier finden wir einen Unterordner app/etc/modules vor, in dem die Extensions registriert werden.

Wir legen hier die Datei Emzee_Checkout.xml an:

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

Hiermit weiß Magento, dass ein Modul Emzee_Checkout existiert, das aktiv ist und im Code-Pool “local” zu finden ist.

Wie man anhand der Datei app/etc/modules/Mage_All.xml sehen kann, ist es denkbar, viele Extensions innerhalb einer Datei zu definieren. In der Praxis bewährt es sich aber, zwecks besseren Überblicks pro Extension eine XML-Datei anzulegen und sie mit dem Namen der Extension zu versehen.

Schnellzusammenfassung

Die Grundlage für die eigene Extension schafft man mit den folgenden vier Schritten:

  1. Einen Namen für die Extension (bestehend aus Packageund Modulname) überlegen.
  2. Im Code-Pool local oder community die entsprechende Verzeichnisstruktur anlegen, zum Beispiel app/code/local/Emzee/Checkout/ für die Extension Emzee_Checkout.
  3. Innerhalb des Extension-Verzeichnisses die grundlegende XML-Konfigurationsdatei etc/config.xml anlegen, im Beispiel app/code/local/Emzee/Checkout/etc/config.xml:
    <?xml version="1.0" encoding="UTF-8"?>
    <config>
        <modules>
            <Emzee_Checkout>
                <version>0.0.1</version>
            </Emzee_Checkout>
        </modules>
    </config>
  4. Magento die Extension bekannt machen, indem man im allgemeinen Konfigurationsverzeichnis die benötigte XML-Datei mit einem sprechenden Namen erstellt, zum Beispiel app/etc/modules/Emzee_Checkout.xml:
    <?xml version="1.0" encoding="UTF-8"?>
    <config>
        <modules>
            <Emzee_Checkout>
                <active>true</active>
                <codePool>local</codePool>
            </Emzee_Checkout>
        </modules>
    </config>

Fazit

Diese Anleitung ist euer erster Schritt, um eigene Extensions anzulegen. Noch bewirkt die Erweiterung nichts, doch mit ein wenig Arbeit könnt ihr Controller erstellen oder erweitern, Navigationsmenüs bearbeiten (Top-Navigation, Footer, Benutzerkonto), eure eigene API veröffentlichen, neue Zahlungs- und Versandarten definieren, das Design ausbauen und noch vieles mehr.

Ähnliche Artikel