Buchrezension: Magento – Das Handbuch für Entwickler

Vor gut zwei Monaten ist ein neues Werk zu Magento erschienen: „Magento – Das Handbuch für Entwickler“ aus dem Hause O’Reilly. Ich möchte euch ein persönliches Review dazu präsentieren, da über das Buch bisher wenig zu lesen war. Zum Ausgleich schreibe ich dafür etwas mehr. 😉

Wollte man sich in die Entwicklung von Magento einarbeiten, musste man bisher auf Web-Ressourcen zurückgreifen, die sich über verschiedenste Internet-Angebote verteilen. Es gibt zwar offizielle Plattformen wie das Wiki, das Community-Forum oder die automatisch generierte API-Dokumentation und viele von Entwicklern betriebene Websites und Blogs, doch eine umfassende, strukturierte Plattform fehlte bisher.

Die Autoren Roman Zenner, Vinai Kopp, Claus Nortmann, Sebastian Heuer, Dimitri Gatowski und Daniel Brylla schicken sich nun an, diese Lücke zu schließen und möchten ein fundiertes Buch zum Thema Magento-Entwicklung bieten. Die große Frage, die sich stellt: gelingt das auch?

Aufbau des Buches

Wenn man das gute Stück in Händen hält, erwarten einen neben der Einführung und dem Anhang 261 Seiten, die auf 11 Kapitel verteilt werden. Die vier Kapitel des ersten Teils sind eher theoretischer Natur und führen den Leser in die grundlegenden Konzepte von Magento ein. Man darf aber nicht glauben, dass dieser Teil dadurch „staubtrocken“ ist: tatsächlich werden bereits hier erste Code-Beispiele eingeführt und einfache Änderungen durchgeführt.

Der zweite Teil wendet sich der Praxis zu und bietet in bewährter O’Reilly-Tradition Rezepte zum Themenbereich des jeweiligen Kapitels an. Ich stelle im Verlauf des Postings die verschiedenen Rezepte vor, ihr könnt euch aber im Inhaltsverzeichnis vorab informieren.

Theorie-Teil

Kapitel 1: Grundlagen

Kapitel 1 widmet sich den Grundlagen von und Konzepten hinter Magento. Der Leser erfährt (falls er es nicht bereits weiß), dass das System auf dem Zend Framework basiert und entsprechend des MVC-Patterns aufgebaut ist. Dabei wird nicht nur erklärt, was MVC bedeutet, sondern es wird auch auf die Umsetzung dieses Entwurfsmusters in Magento eingangen.

Im folgenden Abschnitt wird die Verzeichnisstruktur des Magento-Cores und der -Module entschlüsselt und somit der modulare Aufbau offen gelegt. Wir erkennen: der Code wird in 3 Code-Pools unterteilt (für den Kern des Systems, Community-Erweiterungen und eigene Modifikationen) und mit Namespaces versehen (Pseudo-Namespaces, nicht jene aus PHP 5.3), um Konflikten bei den Klassennamen aus dem Weg zu gehen.

Anschließend wird die Struktur auf Design-Seite in Angriff genommen. Es gibt zwischen 3 grundlegenden Bereichen unterschieden (Installer, Backend und Frontend), für die verschiedene graphische Oberflächen in Form von Themen (Themes) angelegt werden können. Diese Themen können wiederum in übergeordneten Packages (Interfaces) zusammengefasst werden, wobei die Packages in den allermeisten Fällen vernachlässigt werden können. Zudem wird der Buchbesitzer darauf vorbereitet, dass er häufig von Layouts und Templates lesen wird, wobei sich deren Bedeutung im Magento-Universum etwas vom üblichen Schema unterscheidet.

Zuletzt wird erklärt, wie der Shop mittels Routing eine URL in eine auszuführende Aktion umlegt und wie ein Requestzyklus abläuft (über das Thema Requestzyklus habe ich hier bereits geschrieben).

Fazit: Wer sich mit Magento bereits beschäftigt hat, wird das bereits alles wissen. Für Neueinsteiger bietet das Kapitel jedoch eine kompakte Einführung in die Struktur des eCommerce-Systems.

Kapitel 2: Die erste eigene Extension

In Kapitel 2 geht es bereits an den Bau einer eigenen Extension. Neben dem unvermeidlichen „Hello World“-Beispiel lernt man, wie man sich über eine neue Bestellung per E-Mail informieren lassen kann und wie man Kategorien um weitere Informationen erweitert.

Dabei wird gleich eine Menge geboten:

  • das Layout wird aktualisiert,
  • eine eigene Route für einen neuen Action-Controller eingerichtet (damit die Extension über http://die-shop.url/helloworld erreichbar ist),
  • das Event-System wird mittels eines Event-Observers vorgestellt,
  • Mehrsprachigkeit wird berücksichtigt,
  • das Backend wird um eine Konfigurations-Option erweitert,
  • es wird ein Installations-Skript eingerichtet und
  • die Kategorie-Entität erweitert (dazu später mehr).

Dabei wird aufgezeigt, dass es 3 Wege der Erweiterung gibt: die Erweiterung bestehender Klassen (Rewrites), das Hook-System (über das Event-Observer-Pattern) und die Ersetzung der Core-Klassen, indem man sie quasi überschreibt. Vor- und Nachteile der verschiedenen Methoden werden beschrieben und zum Glück wird auch explizit von der letzten Variante abgeraten. Core-Klassen überschreiben sollte man meiner Meinung nach nur für kurze Tests, wenn man es gerade sehr eilig hat. Wenn möglich, lässt man aber auch das lieber sein, sonst wird die Änderung womöglich nicht mehr zurück genommen.

Fazit: der erfahrene Magento-Entwickler kennt das meiste bis alles und freut sich, dass es so schnell losgeht. Der Einsteiger holt sich einen kühlen Gerstensaft und liest das Kapitel ein zweites oder drittes Mal.

Kapitel 3: Daten, Daten, Daten

Kapitel 3 kann in drei Worten zusammengefasst werden: Daten, Daten, Daten. Wer wissen möchte, wie Magento seine Daten speichert, wird hier fündig. Es wird beschrieben, wie Magento zur Abbildung der Daten prinzipiell das EAV-Modell verwendet und aus Performance-Gründen in einigen Fällen zudem das Prinzip der flachen Tabellen einbindet. Wir hören und lesen von allem, was dazu gehört: Entitäten, Attributen, Attributsets, Attributtypen und Attributwerten. Der EAV-Novize lernt diese Datenstruktur kennen und erfährt, wie die Umsetzung in Magento erfolgt. Klingt kompliziert? Ist nicht so schlimm, wie es klingt. Als Magento-Entwickler kommt man sowieso nicht drum herum.

Wie richtig erwähnt wird, unterscheidet Magento zwischen den Models, die für die Geschäftslogik zuständig sind, und den Resource-Models, die für die Speicherung (Persistenz) der Daten sorgen. Für beide werden häufig benötigte Methoden vorgestellt, zum Beispiel um die Daten eines Models in verschiedenen Formaten (Array, JSON, XML) auszugeben oder Daten anhand von bestimmten Attributen auszuwählen, zu sortieren oder zu filtern.

Das Beispielrezept für dieses Kapitel zeigt, wie man – wie originell – eine Rezept-Verwaltung anlegt. Die Rezepte werden dann passend zum Produkt angezeigt. Positiv ist auf jeden Fall, dass es sich um ein realistisches Szenario handelt.

Fazit: Was man hier auf wenigen Seiten serviert bekommt, eignet man sich ansonsten nur durch mühsames Lernen und viel Erfahrung an. Meiner Meinung nach ein Pflichtkapitel für jeden, der ernsthaft eine Extension entwickeln will.

Kapitel 4: Das Frontend

Wir sind inzwischen bei Kapitel 4 angelangt. Hier wird alles angesprochen, was das Frontend, also die tatsächlich benutzbare Oberfläche betrifft. Nun wird genauer auf das eingangen, was bereits in Kapitel 1 kurz angesprochen wurde: für Magento-Shops können mehrere Designs erstellt werden. Diese Designs werden Themen (Themes) genannt und können in Packages (bzw. Interfaces) zusammengefasst werden. Der Code wird an zwei verschiedenen Stellen abgelegt. Unter skin/ liegen die Dateien, die für den Web-Browser erreichbar sein müssen und unter app/design/ liegen die Layout- und Template-Dateien. Doch damit nicht genug: Magento kennt zudem noch Blöcke (Blocks), präziser formuliert Inhalts- und Strukturblöcke.

Am Beginn wirkt das Konzept vielleicht etwas verwirrend. Daher wird das Zusammenspiel der Komponenten Layout, Block und Template anschaulich erklärt. Es wird gezeigt, wie Layouts erstellt und aktualisiert werden, wie Blöcke befüällt, geleert und entfernt werden, wie über die Layout-Dateien Block-Methoden ausgeführt und Helper ausgeführt werden. Auch einige nützliche Block-Basis-Methoden werden aufgezeigt.

Die Rezepte in diesem Kapitel beschränken sich auf einfachere Beispiele. Der Mini-Warenkorb wird auf die andere Seite verschoben, nicht benötigte Seiten-Elemente entfernt sowie Links in der Top-Navigation und im Benutzer-Konto hinzugefügt.

Nicht zuletzt wird kurz auf die verwendete JavaScript-Bibliothek Prototype und das darauf Aufbauende script.aculo.us eingegangen. Wir lernen, wie wir Ajax-Calls absetzen und dazu einen Ajax-Controller erstellen, der die Abfrage verarbeitet und die Antwort im JSON-Format zurück gibt. Abschließend wird gezeigt, wie JavaScript- und CSS-Dateien richtig eingebunden werden.

Fazit: Bei den Rezepten handelt es sich um Arbeiten, die am Beginn einer Shop-Anpassung durchaus anfallen. Ein komplexeres Beispiel hätte dem Kapitel sicher nicht schlecht getan. Auf der anderen Seite werden alle konzeptionellen Bestandteile des Design-Systems erklärt und der Entwickler mit dem Rüstzeug für die weitere Erforschung ausgerüstet.

Praxis-Teil

Mit Kapitel 4 ist der theoretische Teil abgeschlossen. Im nächsten Gang werden größere Rezepte umgesetzt und dabei die entsprechenden Teile des Shop-Systems vorgestellt. Kochschürze umbinden und los geht’s!

Kapitel 5: Produkte und Kategorien

Folgende Beispiele werden umgesetzt:

  • Dem Shop wird eine vertikale Tree-Navigation verpasst.
  • Die Kategorie-Entität wird erweitert, so dass im Backend für jede Kategorie eine Standard-Ansicht festgelegt werden kann. Falls sich für bestimmte Sparten die tabellarische Ansicht aufgrund der Anzahl oder der Art der Artikel besser eignet als die Listendarstellung, kann man so die Verkaufsplattform optimieren. Wenn man eigene Darstellungsformen erstellt, können natürlich auch die ausgewählt werden.
  • Es wird ein Ajax-Controller erstellt, damit man Produkte per AJAX zur Vergleichsliste hinzufügen kann, ohne die Seite neu laden zu müssen. Ähnliche Anpassungen wären auch für die Produktseite oder die Filternavigation denkbar, wobei die Vor- und Nachteile abgewogen werden müssen.
  • Im vierten Rezept wird die Preisgestaltung erweitert. Durch die Extension kann der Shop-Betreiber pro Kunde einen absoluten oder prozentuellen Nachlass einstellen. Dazu wird die Preisberechnung über Observer manipuliert und die Customer-Entity erweitert.
  • Zum Abschluss wird ein neues Frontend-Widget zur Einbindung von Produkt-Infos in CMS-Seiten oder -Blöcken programmiert. Bei den Widgets handelt es sich um eine neue Funktion von Magento 1.4, die es ermöglicht, dass ohne Programmieraufwand konfigurierbare Elemente in die Seite eingebunden werden. Die Einrichtung wird über die neue Datei widget.xml vorgenommen.

Fazit: es werden verschiedene Bereiche der Produkt- und Kategorie-Programmierung abgehandelt, wobei vor allem mit dem zweiten und dem vierten Rezept Funktionalitäten umgesetzt werden, die über das typische 08/15-Schema hinausgehen. Das gefällt mir und ich denke, dass mit den Erweiterungen ein recht guter Überblick gegeben wird.

Kapitel 6: Angebote und Bestellungen

Meiner Erfahrung nach haben Kunden Anpassungen in diesem Bereich besonders gerne. Man könnte aber auch behaupten, dass Magento hier noch ein paar Grundfunktionalitäten vermissen lässt.

  • Das Kapitel beginnt mit einer Anpassung der Bestell-Daten: es soll erstens die Bestellung um ein Attribut erweitert werden, mit dem die Kampagne aufzuzeichnen, die zum Kauf geführt hat und zweitens sollen die Adressdaten um ein Feld erweitert werden, um festzuhalten, ob die Adresse erfolgreich geprüft werden konnte. Neben der Anpassungen der entsprechenden Entitäten muss beachtet werden, dass beim Bestellabschluss das Angebot (Quote) in den Auftrag (Order) überführt wird. Man muss dafür sorgen, dass die neuen Attribute bei dieser Konvertierung übernommen werden.
  • Ein zusätzlicher Bestell-Status wird implementiert – ein Klassiker. Daher darf auch diese Erweiterung nicht fehlen.
  • Darauf folgt ein umfangreicheres Beispiel: mit einer Anpassung wird es ermöglicht, höhere Versandkosten für beliebige Produkte festzulegen. Hier kann man einiges lernen, da schön gezeigt wird, an wievielen Stellen die Modifikation berücksichtigt werden muss.
  • Die nächsten Rezepte ergeben zusammen ein Menü: zuerst wird das Backend um Konfigurationsmöglichkeiten erweitert und ein neuer Menüpunkt im linksseitigen Menü unter System => Verwaltung angelegt. Danach werden die Zugriffsrechte für den neuen Punkt eingepflegt.  Darauf aufbauend wirden im dritten Rezept eine Verkaufs-Aktion gebastelt: es kann ein Artikel definiert werden, der gratis zur Bestellung dazu gelegt wird, wenn eine definierte Menge von Artikeln mit einem definierten Mindestwert im Warenkorb liegen.
  • Das Ende das Kapitels wird mit einer weiteren Standarderweiterung eingeläutet: die Bestellung wird durch ein Kommentarfeld angereichert.

Fazit: In der Praxis vermutlich eines der hilfreichsten Kapitel, da einerseits häufig nachgefragte Erweiterungen abgehandelt werden und zweitens die Marketing-Abteilungen der Unternehmen gerne durch originelle Preisgestaltungen auffallen. 😉

Kapitel 7: Integration externer Systeme

Bei Webshops ist die Einbindung von Warenwirtschaftssystemen, ERP- und CRM-Lösungen ein wichtiges Thema. Schließlich stellt das Geschäft im Internet oftmals nur einen weiteren Distributionsweg dar und muss sich in vorhandene Strukturen einfügen, in denen die Verwaltung des Artikelbestandes, der Bestellungen und der Kunden bereits umgesetzt wurde. Daher wird es nun spannend: wie schlägt sich das Handbuch für Entwickler in diesem Bereich?

  • Im ersten Rezept wird die Synchronisierung der Produkt-Bestände behandelt. Code sucht man allerdings vergebens. Immerhin wird auf ein Model verwiesen, mit dem die Bestände aktualisiert werden können, ohne dass das aufwändige Laden des Product-Models vollzogen werden muss. Bei Produktbeständen im fünf- oder sechsstelligen Bereich ist da nämlich schnell „Schicht im Schacht“, wie man so schön sagt.
  • Weiter geht es mit dem Export von Aufträgen zu ERP-Systemen. Hier werden die Bestellungsdaten ins XML-Format gebracht und per HTTP-Post-Request an eine URL gesendet. Das Antwort-XML wird ausgelesen und im Fehlerfall geloggt. Da sich bei längeren Antwortzeiten das Kauferlebnis für den Kunden in die Länge zieht, wird zudem eine Alternative mit Cronjobs angesprochen, die im Hintergrund die Bestellungen verarbeitet. Dieses Beispiel ist auf jeden Fall nützlicher als das vorherige, auch wenn man in der Praxis noch einige Erweiterungen vornehmen würde (z.B. den Einbau eines Authentifizierungsmechanismus, die Konfigurierbarkeit der URL des ERP-Systems).
  • Zwischen die Datenaustausch-Rezepte schleicht sich dann – quasi als Jause – die Integration des Scripts Highslide ein. Meiner Meinung nach ist die Stelle etwas unglücklich gewählt, doch externes System ist externes System.
  • Zurück zu den Daten: nun folgt ein Importer-Modul. Das Skript liest eine CSV-Datei ein und erstellt bzw. aktualisiert die Produkte aus dem WaWi-System. Hierbei wird auch nach passenden Bildern gesucht, die gegebenenfalls eingefügt werden. Es wird nur ein Teil des Codes abgedruckt; den Rest findet man auf der Website zum Buch. Daher will ich mich nicht zu weit aus dem Fenster lehnen, aber ich habe den Eindruck, dass z.B. das Löschen nicht mehr vorhandener Produkte nicht berücksichtigt wird. Wenn das Produkt bereits ein Bild zugeordnet hat, wird dieses gelöscht und das neue hinzugefügt. Ein reales Import-Skript wird das Bild lieber auf Änderungen untersuchen, da das Löschen und Einfügen in einem Shop mittlerer Größe bereits zu viel Zeit in Anspruch nehmen wird.
  • Vermutlich will man diesen Prozess nicht ständig manuell anstoßen. Daher bietet es sich an, den Produktimport über ein Shell-Script zu starten. In diesem Rezept wird die Klasse Mage_Shell_Abstract verwendet, die sich als sehr nützlich erweist und Aufgaben wie das Parsen der Commandline-Parameter übernimmt.
  • Das nächste Süppchen handelt vom Hinzufügen und Löschen der Bilder. Das klingt nicht sehr spektakulär und ist es auch nicht. Dennoch kann es interessant sein, wie hier programmatisch vorgegangen wird.
  • Zuletzt wird eine Liste von Bestellungen via SOAP ausgelesen. Es wird wieder ein Shellscript eingesetzt, um die Bestellungen auszulesen. Die SOAP-Schnittstelle wird nur in diesem Rezept verwendet. Man lernt somit die grundsätzliche Verwendung kennen. Mir scheint dieser Bereich aber etwas vernachlässigt, zumal er in unserem Projektalltag einen wesentlich höheren Stellenwert einnimmt.

Fazit: Ich sehe dieses Kapitel mit gemischten Gefühlen. Positiv ist zu erwähnen, dass die Thematik überhaupt aufgegriffen wird. Viele andere Publikationen richten sich ausschließlich an die Betreiber kleinerer Shops und lassen den Punkt überhaupt unter den Tisch fallen. Andererseits kann ich die an manchen Orten zu findende Kritik verstehen, dass dieses Kapitel hinter den anderen zurückfällt. Klarerweise sind die im Einsatz befindlichen externen Systeme zu vielfältig, als dass sich eine Universal-Lösung erarbeiten lassen könnte.

Dennoch wäre die Vorstellung gewisser „Best Practices“ oder ein etwas stärker ausgeweitetes Rezept schön gewesen. Zum Beispiel besitzen viele WaWi-Systeme nicht die Fähigkeit, nur Änderungen zu übertragen. In diesem Fall muss die zu programmierende Schnittstelle dafür Sorge tragen, dass das Erstellen, Aktualisieren und Löschen von Datenbeständen korrekt erfolgt. Ebenso spielen Performance-Fragen im Zusammenspiel mit externen Systemen eine wichtige Rolle. Nun gut, bleibt doch noch etwas Arbeit für uns Blogger übrig. 😉 Insgesamt wurde diesem Kapitel wohl etwas weniger Liebe geschenkt als dem Rest des Buches.

Kapitel 8: Performance & Skalierbarkeit

Weiter geht es mit der Geschwindigkeit des Shops, einem bei Magento besonders heiß diskutierten Thema. Ja, Magento hat einen gewissen Hardware-Hunger und ja, Magento-Shops können sehr flott sein. Die Autoren haben diesem Punkt ein eigenes Kapitel eingeräumt, wofür ich dankbar bin.

Wir finden hier eine Mischung aus Tipps, die sich allgemein bei der Entwicklung von Websites anfinden lassen und aus solchen, die speziell für Magento zutreffen. Erster Tipp (kann man auch bei Steve Souders nachlesen): Reduzierung der HTTP-Requests. Dazu wird das Open-Source-Tool Fiddler vorgestellt, mit dem man nachvollziehen kann, welche Requests für CSS-, JavaScript- und sonstige Dateien wann abgesetzt werden. Es wird erwähnt, dass durch CSS-Sprites und die Zusammenlegung von CSS- bzw. JavaScript-Dateien (Letzteres ist eine neue Funktion von Magento) teure Anfrange an den Webserver eingespart werden können. Die weiteren Tipps: statische Daten können mittels Reverse-Proxies und Pipelining über andere Server ausgeliefert werden, um den eigentlichen Webserver zu entlasten. Noch besser ist es, wenn das Apache-Modul mod_expires verwendet wird und die Daten somit gleich im Browser für längere Zeit gecacht werden. Dafür gibt es im Buch auch Beispiele, um den Einstieg in die wunderbare Welt der Performance-Steigerung zu erleichtern.

Weitere Tipps: das Tunen des MySQL-Query-Caches (ohne Beispielwerte), die Verwendung von APC oder memcached als Bytecode-Cache und Cache-Backend, das Cachen von Blöcken (vollzogen am Beispiel der Produktseite) oder auch das ganzseitige Caching via nginx und memcached für die ganz harten Fälle. Erfreulicherweise wird hier auch darauf hingewiesen, worauf man beim Cachen von Seitenteilen achten muss – sonst kann es schnell einmal Ärger geben, denn wir wollen ja nicht den Warenkorb eines anderen Besuchers sehen.

Fazit: wer Magento schon einmal Beine machen musste, kennt wahrscheinlich alle Vorschläge. (Ok, ganzseitiges Caching musste ich noch nie verwenden.) Dennoch finde ich es sehr erfreulich, dass der Performance-Frage diese Aufmerksamkeit geschenkt wird. Ich bin mir sicher, dass das vielen Lesern etwas bringt.

Kapitel 9: Deployment

Ich war sehr darauf gespannt, wie das Deployment des Shops in diesem Buch behandelt wird, da ich mich damit schon recht ausführlich beschäftigen durfte und dazu sowohl im Netz als auch in der Literatur äußerst wenig zu finden ist.

Basis der Entwicklung bildet die Versionierung, die zum Beispiel mit SVN oder git erfolgt. Davon ausgehend wird ein vierstufiges System dargestellt (Entwicklung und Test, Staging und Live). Der Export der neuen Version in ein eigenes Verzeichnis und die Verwendung von Symlinks sollen die schnelle Umstellung und ein ebenso schnelles Rollback im Problemfall gewährleisten. Bis auf kleine Details stimmt das Setup mit unserer Lösung überein, was wohl bedeutet, dass wir mit unserem Modell gut unterwegs sind.

Als besonderes Schmankerl (oder auch „Highlight“ für alle Leser nördlich des Weißwurst-Äquators) wird auf das Monitoring mit Nagios eingegangen. Ein Bravo von mir, sowas gehört in ein anständiges Entwicklerbuch.

Fazit: ich wollte von diesem Kapitel nicht zu viel vorwegnehmen, da ich gerne den Verkauf von Büchern fördern möchte, die sich solcher Themen annehmen. 😉 Die Berücksichtigung dieses Kapitels ist auf jeden Fall ein Plus.

Kapitel 10: Bezahlung und Versand

Nun geht es noch einmal zurück in die eigentliche Welt des Codes: die Anpassung von Bezahlung und Versand stehen auf dem Plan. Die Autoren betonen, dass es sich bei Erweiterungen in diesem Bereich um komplexe Änderungen handelt. Dem ist nicht viel hinzuzufügen, weswegen wir uns gleich die eingebrachten Rezepte ansehen:

  • Zuerst werden tabellarische Versandkosten erweitert. Genauer gesagt soll es möglich sein, ein Maximalgewicht und einen Maximalwert pro Paket festzulegen. Wird dieser überschritten, wird ein weiteres Paket angelegt, womit die Versandkosten steigen.
  • Im nächsten Rezept wird ein neues Versandmodul erstellt bzw. ein Dummy-Modul dafür vorgestellt. Wieder wird erwähnt, dass die Komplexität nicht zu unterschätzen ist, da an vielen Stellen gewerkt werden muss. Stimmt immer noch.
  • Im letzten Rezept sollte ein neues Bezahl-Modul erstellt werden. Sollte deswegen, weil aufgrund der Komplexität kein Beispiel im Buch vorgelegt wird. Ersatzweise wird im Anhang eine Referenz der beteiligten Klassen sowie des technischen Ablaufs angeboten. Auf der Website zum Buch wird aber ein Dummy-Modul zur Verfügung gestellt.

Fazit: neue Versand- und Bezahl-Arten sind komplex. Gut, der Witz ist ausgereizt. Wo möglich sollte man auf die ausgereiften Extensions zurückgreifen, aber falls man doch eine eigene Erweiterung schreiben muss, bietet das Buch eine recht gute Hilfestelle bei der Erstellung.

Kapitel 11: Erweiterung des Backends

Im letzten Kapitel lernen wir weitere Möglichkeiten kennen, die Administrationsoberfläche auszubauen. In einem ausführlichen Beispiel soll eine Liste von Lieferanten verwaltbar gemacht werden. Die Lieferanten erhalten eine Mail, wenn ein Produkt bestellt wird, mit dem sie verknüpft sind. Folgende Punkte werden in diesem Mehr-Gänge-Menü abgehandelt:

  • Die Erstellung einer eigenen Lieferanten-Entity.
  • Die Erstellung eines eigenen Admin-Controllers.
  • Die Erstellung eines Admin-Grids (also der tabellarischen Darstellung) für die Lieferanten.
  • Für dieses Grid wird ein spezieller Renderer erstellt, der ein Textfeld in der gewünschten Form darstellt.
  • Es werden neue Einträge in die Menü-Leiste eingepflegt.
  • Die E-Mails für die Lieferanten werden durch ein eigenes E-Mail-Template realisiert.
  • Zudem wird ein Cronjob in die Extension integriert.

Fazit: mit diesem Kapitel werden die wichtigen Elemente zur Erweiterung des Backends abgedeckt. Die Modifikation des Menüs unter dem Punkt System > Konfiguration wurde ja bereits früher besprochen; nun wurden die weiteren Bereiche nachgezogen. Natürlich könnte man noch weiter in die Administrationsoberfläche vordringen und die verschiedenen Möglichkeiten aufzeigen, doch als Grundlage für weitere Arbeiten ist der Text durchaus hilfreich.

Anhang

Im Anhang wird eine Liste der Parameter präsentiert, welche beim Hinzufügen von Attributen verwendet werden können. Die Parameter wrden auch erklärt, was sehr praktisch ist, weil ich bisher noch keine vergleichbare Ressource gefunden habe.

Zudem wird – wie bei Kapitel 10 erwähnt – eine Hilfestellung für die Erstellung von Zahlungs- und Versand-Methoden geleistet. Hier finden sich Order-Stati, Model-Eigenschaften und -Methoden für die Payment-Einbindung sowie der Ablauf des Zahlungsvorgangs beim One-Page-Checkout.

Fazit

„Magento – Das Handbuch für Entwickler“ ist das bisher beste Buch für die Entwicklung von Magento, das ich gelesen habe. Es hat sich zwar der eine oder andere (vorwiegend typographische) Fehler eingeschlichen, doch man findet hier Lösungen, die nicht eben ‚mal „hingepfuscht“ werden, sondern saubere Lösungen darstellen. Auf knapp 260 Seiten wird ein großer Themenumfang kompakt abgebildet, was vom Leser geistige Mitarbeit erfordert, aber ihn nicht vor unmögliche Aufgaben stellt. Wer nicht denken will, wird bei Magento ohnehin nicht weit kommen.

Natürlich gibt es kein Licht ohne Schatten. Kleinere Schwächen wie Kapitel 7 und einige wenige Fehler habe ich bereits erwähnt. (Für Korrekturen kann man übrigens die Errata-Seite des Buches konsultieren.) Darüber hinaus hätte ich mir gewünscht, dass dem Thema Übersetzungen und Währungen noch etwas mehr Aufmerksamkeit gewidmet wird. Es wird zwar immer wieder mit Übersetzungs-Helpern gearbeitet; wie aber mit CSV-Dateien Standard-Übersetzungen für verschiedene Sprachen in Extensions eingebunden werden können, darüber wird kein Wort verloren. Die Verwendung mehrerer Währungen wird zwar hie und da angesprochen, doch gefühlsmäßig könnte da noch mehr geleistet werden.

Da Magento zumindest in der Community Edition ein Open-Source-Produkt ist, wäre es zudem schön gewesen, wenn die Erstellung einer Community-Extension gezeigt wird. So könnten die Entwickler wieder etwas von ihrem neu gewonnenen Wissen zurückgeben.

Bei ausführlicheren Beispielen wird zum Teil der Code etwas stark abgekürzt. Andererseits ist das verständlich, da der Umfang des Buches sonst womöglich rasant ansteigt. Magento mag ständig im Wandel begriffen sein, aber dennoch wäre ein ausführliches Cookbook (wie zum Beispiel für TYPO3) durchaus wünschenswert, damit Magento in all seiner Konfigurations- und Erweiterungsvielfalt dargestellt werden kann.

Empfehlung: insgesamt kann ich dieses Buch guten Gewissens empfehlen. Neueinsteiger lernen die Erweiterung des Shop-Systems von Grund auf (wobei schon einiges an Mitarbeit erforderhlich ist), bereits erfahrene Entwickler können das eine oder andere nachzusehen, wenn es in ihren bisherigen Projekten noch nicht umgesetzt werden musste.

PS: falls ihr mir ein „Danke“ für diesen Beitrag hinterlassen wollt, könnt ihr das Buch über den folgenden Link bei Amazon bestellen. Das verändert für euch nichts an der Bestellung oder den Kosten – der einzige Unterschied ist, dass Amazon weiß, wer euch dieses Buch empfohlen hat. 😉

6 Antworten

  1. Roman Zenner sagt:

    Guten Morgen Matthias, danke für die umfangreiche und kluge Rezension, so etwas liest man gerne zum Start der Woche 🙂

  2. Vinai Kopp sagt:

    Hallo Matthias, da hast Du wirklich eine sehr ausführliche Rezension geschrieben, vielen Dank! Mich freut das positive Fazit sehr, insbesondere da es nicht einfach war so viele Co-Autoren unter einen Buch-Deckel zusammen zu bekommen.
    Danke auch für die Anregungen was noch fehlt oder erweitert werden sollte – ich habe mir das notiert für die nächste Überarbeitung!

    Vinai

    • Hallo Vinai,

      danke für das Lob. Die Koordination in einem 6-Mann-Team ist sicher nicht einfach, aber ihr habt eure Sache gut gemacht! Ich bin gespannt, was man in Zukunft noch so lesen darf.

  1. 26.09.2010

    […] mit zwei spannenden Artikel auffährt: Zuerst endlich eine ausführliche Buchrezension für “Magento – Das Handbuch für Entwickler” und im Zweiten beschreibt Matthias sehr ausführlich den Ablauf eines […]

  2. 22.09.2013

    […] (laut O’Reilly Anfang Juli, laut Amazon Anfang August). (Update 26.09.2010: ich habe eine Rezension zu dem Buch geschrieben.)  Ich bin bereits sehr gespannt darauf, da hier ebenfalls ein tiefer […]