15
Programmierung, Anpassung & Integration Roman Zenner &Vinai Kopp sowie Claus Nortmann, Sebastian Heuer, Dimitri Gatowski & Daniel Brylla von Visions new media O REILLY Magento Das Handbuch für Entwickler

Programmierung, Anpassung & Integration · PDF fileDas Zend Framework | 3 Im Zend Framework und damit auch in Magento hat so ziemlich alles seine Ordnung. Beide folgen dem sogenannten

  • Upload
    vominh

  • View
    223

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Programmierung, Anpassung & Integration · PDF fileDas Zend Framework | 3 Im Zend Framework und damit auch in Magento hat so ziemlich alles seine Ordnung. Beide folgen dem sogenannten

Programmierung, Anpassung & Integration

O

MagentoDas Handbuch fürEntwickler

Roman Zenner &Vinai Kopp sowie Claus Nortmann, Sebastian Heuer, Dimitri Gatowski

& Daniel Brylla von Visions new media’Reilly

Page 2: Programmierung, Anpassung & Integration · PDF fileDas Zend Framework | 3 Im Zend Framework und damit auch in Magento hat so ziemlich alles seine Ordnung. Beide folgen dem sogenannten

Inhalt

Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . IX

1 Der erste Eindruck . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1Das Zend Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2Granularer Aufbau durch Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4Die Verzeichnisstruktur von Magento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6Das MVC-Pattern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11Requestzyklus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

2 Eigene Extensions entwickeln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17Eine Extension konfigurieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18Eine Extension in Magento aktivieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23Die Verzeichnisstruktur einer Extension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25Praxisbeispiel 1: HelloWorld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26Magento richtig erweitern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29Praxisbeispiel 2: Eine Bestellbenachrichtigung per E-Mail verschicken . . . . . . 34Praxisbeispiel 3: Die Category-Entität erweitern . . . . . . . . . . . . . . . . . . . . . . . 40

3 Models und Resource-Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45Entity-Attribute-Value (EAV) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46Datenbankstruktur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55Resource-Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62Praxisbeispiel: Eine Extension zur Verwaltung von Rezepten . . . . . . . . . . . . . 63

4 Das Magento-Frontend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73Themes und Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74Seiten aufbauen mit Blöcken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77Blöcke mit Templates formatieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81Mit Layouts arbeiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85Praxisbeispiel: Verschiedene Layout-Updates . . . . . . . . . . . . . . . . . . . . . . . . . 96JavaScript und AJAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102

| V

Page 3: Programmierung, Anpassung & Integration · PDF fileDas Zend Framework | 3 Im Zend Framework und damit auch in Magento hat so ziemlich alles seine Ordnung. Beide folgen dem sogenannten

5 Produkte und Kategorien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1095.1 Eine vertikale Tree-Navigation erstellen. . . . . . . . . . . . . . . . . . . . . . . . . . 1105.2 Eine Standardansicht pro Kategorie setzen. . . . . . . . . . . . . . . . . . . . . . . . 1135.3 Produkte per AJAX einer Vergleichsliste hinzufügen. . . . . . . . . . . . . . . . 1175.4 Kundenpreise anlegen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1235.5 Ein Produkt mit einem Frontend-Widget darstellen . . . . . . . . . . . . . . . . 130

6 Angebote und Bestellungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1376.1 Bestelldaten anreichern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1376.2 Einen zusätzlichen Status für Bestellungen hinzufügen . . . . . . . . . . . . . . 1396.3 Einen produktspezifischen Versandaufpreis festlegen . . . . . . . . . . . . . . . 1446.4 Das Admin-Panel um eigene Konfigurationsmöglichkeiten erweitern . . . 1566.5 Nutzerrechte für neue Extensions anlegen . . . . . . . . . . . . . . . . . . . . . . . . 1616.6 Gratisartikel in den Warenkorb legen . . . . . . . . . . . . . . . . . . . . . . . . . . . 1636.7 Ein Bestellkommentarfeld einfügen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166

7 Systemintegration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1717.1 Produktbestände mit Drittsystemen synchronisieren. . . . . . . . . . . . . . . . 1727.2 Aufträge an ERP-Systeme exportieren . . . . . . . . . . . . . . . . . . . . . . . . . . . 1737.3 Highslide für Bilder und sonstige Medien nutzen. . . . . . . . . . . . . . . . . . . 1767.4 Ein Importer-Modul erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1787.5 Den Produktimport über ein Shell-Skript starten . . . . . . . . . . . . . . . . . . . 1857.6 Bilder Produkten hinzufügen und löschen . . . . . . . . . . . . . . . . . . . . . . . . 1867.7 Eine Liste von Bestellungen via SOAP auslesen . . . . . . . . . . . . . . . . . . . . 188

8 Performance und Skalierbarkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1918.1 Die Systemperformance mit Fiddler analysieren . . . . . . . . . . . . . . . . . . . 1948.2 Einfache Lasttests mit ab2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1968.3 Mit Code-Profiling die Performance einzelner Funktionen messen . . . . . 1978.4 Clientseitiges Caching für statische Daten optimieren . . . . . . . . . . . . . . . 1988.5 Statische Daten mit dem Reverse-Proxy-Verfahren ausliefern . . . . . . . . . 1998.6 Statische Daten durch Pipelining schneller ausliefern . . . . . . . . . . . . . . . 2028.7 APC als Magento-Cache-Backend verwenden . . . . . . . . . . . . . . . . . . . . . 2038.8 Eine Memcached-Caching-Infrastruktur in Magento integrieren. . . . . . . 2048.9 Seitenteile mithilfe von Block-Caching zwischenspeichern . . . . . . . . . . . 2058.10 Ganzseitiges Caching mit nginx und Memcached . . . . . . . . . . . . . . . . . . 208

9 Deployment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2159.1 Interne Versionierung und Release-Management. . . . . . . . . . . . . . . . . . . 2169.2 Deployment und der Symlink-Hack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2179.3 Magento in ein Monitoring integrieren . . . . . . . . . . . . . . . . . . . . . . . . . . 219

VI | Inhalt

Page 4: Programmierung, Anpassung & Integration · PDF fileDas Zend Framework | 3 Im Zend Framework und damit auch in Magento hat so ziemlich alles seine Ordnung. Beide folgen dem sogenannten

10 Bezahlung und Versand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22310.1 Tabellarische Versandkosten um eigene Regeln erweitern. . . . . . . . . . . . 22310.2 Ein Dummy-Versandmodul erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23110.3 Ein neues Bezahlmodul erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236

11 Das Admin-Panel erweitern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23911.1 Eine Lieferanten-Entity erstellen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23911.2 Eine Datentabelle über ein eigenes Admin-Grid bearbeiten. . . . . . . . . . . 24211.3 Ein neues Admin-Grid aufbauen und gestalten . . . . . . . . . . . . . . . . . . . . 24411.4 Einen speziellen Renderer für ein Grid einbinden . . . . . . . . . . . . . . . . . . 24811.5 Einen neuen Eintrag in der Navigation des Admin-Panels anlegen . . . . . 25011.6 Ein neues Produktattribut über ein Update-Skript anlegen . . . . . . . . . . . 25311.7 Ein neues E-Mail-Template im Admin-Panel erstellen und pflegen . . . . . 25511.8 Einen Cronjob in eine Extension integrieren . . . . . . . . . . . . . . . . . . . . . . 258

Anhang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263Liste der Attributeigenschaften . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263Die Magento-Payment-API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283

Inhalt | VII

Page 5: Programmierung, Anpassung & Integration · PDF fileDas Zend Framework | 3 Im Zend Framework und damit auch in Magento hat so ziemlich alles seine Ordnung. Beide folgen dem sogenannten

Kapitel 1 KAPITEL 1

Der erste Eindruck

Ein paar ruhige Minuten sind gefunden, Ablenkungsweltmeister wie die Twitters undFacebooks dieser Welt wurden zum Schweigen gebracht, vor Ihnen befindet sich nebender eingangs im Detail beschriebenen Magento-Entwicklungsumgebung nur noch diesesBuch und wahlweise eine Tasse Ihres bevorzugten Heißgetränks. Kurzum, es sprichtnichts dagegen, in die Tiefen Magentos vorzudringen.

In diesem Kapitel möchten wir Ihnen einen ersten Eindruck von Magentos Funktions-weise und innerem Aufbau vermitteln. Dabei gehen wir auf das zugrunde liegende Ord-nungsprinzip und die Benennungskonventionen genau so ein wie auf seineVerzeichnisstruktur und seine Gliederung in funktionale Einheiten, die sogenanntenModule. In den nachfolgenden Kapiteln beschäftigen wir uns mit den einzelnen Bestand-teilen des Systems im Detail ein und werden diese im zweiten Teil des Buchs anhandpraktischer Beispiele weiter vertiefen.

Es gibt grob gesagt zwei verschiedene Wege, sich dem Aufbau von Magento zu nähernund Ihnen damit – wie es auch der Titel dieses Kapitels andeutet – einen ersten Eindruckvon diesem System zu vermitteln. Zum einen lassen sich auf Verzeichnis- und Dateiebenewichtige Zusammenhänge verdeutlichen, ganz nach dem Motto: Wo finde ich was?Alternativ kann man sich dem System auch über das funktionale Prinzip des sogenanntenMVC-Patterns nähern und zeigen, welche Teile des Systems für die Ausgabe, welche fürdie logische Steuerung und welche für die Datenhaltung verantwortlich sind. Wir habenuns dazu entschlossen, in dieser Einführung beide Wege miteinander zu kombinieren,um Ihnen den bestmöglichen Zugang zu Magento bieten zu können.

Dazu werden wir als Erstes das zugrunde liegende Zend Framework kurz umreißen, daviele Ordnungsprinzipien und Codestandards von Magento stark an dieses Frameworkangelehnt sind. Danach beleuchten wir den internen Aufbau eines Magento-Moduls undwie sich dieser in die Gesamtstruktur der Magento-Applikation einfügt. In diesemZusammenhang werden Sie auch erkennen, wie sich darin die Abstammung vom Zend

| 1

Page 6: Programmierung, Anpassung & Integration · PDF fileDas Zend Framework | 3 Im Zend Framework und damit auch in Magento hat so ziemlich alles seine Ordnung. Beide folgen dem sogenannten

Framework widerspiegelt. In der Diskussion der Magento-Verzeichnisstruktur gehen wirauf diejenigen Verzeichnisse ein, die für die tägliche Arbeit mit Magento relevant sind.

Anschließend werfen wir einen Blick auf das sogenannten Model-View-Controller-(MVC-)Pattern und wie es in Magento umgesetzt wird. Anhand dieses Patterns werden wir dieKomponenten der Magento-Systemlogik erläutern. Mit dieser Basis werden Sie in derLage sein, den Requestzyklus im Abschnitt »Requestzyklus«, auf Seite 15 nachzuvollzie-hen, der alle beschriebenen Elemente enthält und diese zueinander in Beziehung setzt.

Das Ziel dieses Kapitels ist es demnach, dass Sie die wichtigsten Begrifflichkeiten ausdem Magento-Universum kennengelernt haben und anhand des Requestzyklus wissen,wie sie einzuordnen sind. Dies bezieht sich sowohl auf die Platzierung innerhalb des Pro-grammablaufs als auch auf Magentos Datei- und Verzeichnisstruktur.

Das Zend FrameworkMagentos zugrunde liegende Struktur ist weder vom Himmel gefallen, noch stellt sie perse eine Revolution in der Programmiertechnik dar. Vielmehr orientiert sie sich an etab-lierten Industriestandards und Best Practices moderner, objektorientierter PHP-Program-mierung. Sie leitet sich hauptsächlich vom Zend Framework (ZF) ab, das zu den amhäufigsten genutzten PHP-Frameworks zählt.

Wozu sollte man überhaupt ein Framework benutzen, und aus welchem Grund ent-schloss sich Varien vor einigen Jahren, ihre Shopsoftware Magento auf einem solchenbasieren zu lassen? Die Antwort auf beide Fragen ist im Grunde dieselbe: Weil es die logi-sche Konsequenz aus den Erfahrungen moderner Webentwicklung ist. Mittlerweilebefeuern PHP-basierte Applikationen gut besuchte Websites überall auf der Welt undmüssen aus diesem Grund hochperformant und sicher sein; außerdem müssen Neuent-wicklungen schnell zu erstellen sein, um den Anschluss an den sich immer schneller ent-wickelnden Markt nicht zu verlieren. Um nicht jedes Mal das Rad neu erfinden zumüssen, besteht daher der nächste Schritt darin, auf ein standardisiertes Frameworkzurückzugreifen, um wiederkehrende Aufgaben effizient erledigen zu können. Dazugehören beispielsweise der Versand von E-Mails, diverse Datenbankkonnektoren sowiePDF- und Formularerstellung. Da moderne Webapplikationen längst nicht mehr ohnezumindest eine Prise AJAX auskommen, sind JavaScript-Frameworks wie Dojo ebenfallsangebunden.

Die Entwickler von Magento haben also nicht versucht, das Rad komplett zu erfinden,sondern sich dafür entschieden, auf ein bereits existierendes Framework aufzusetzen undvon der Stabilität und Flexibilität der vorhandenen Komponenten, der guten Dokumen-tation und nicht zuletzt der engagierten Community zu profitieren. Falls Sie das eine oderandere Projekt bereits mit dem Zend Framework umgesetzt haben, sind Ihre Voraus-setzungen gut, auch in Magento das Gewünschte umzusetzen.

2 | Kapitel 1: Der erste Eindruck

Page 7: Programmierung, Anpassung & Integration · PDF fileDas Zend Framework | 3 Im Zend Framework und damit auch in Magento hat so ziemlich alles seine Ordnung. Beide folgen dem sogenannten

Im Zend Framework und damit auch in Magento hat so ziemlich alles seine Ordnung.Beide folgen dem sogenannten Convention over Configuration-(CoC-)Paradigma, d.h.,es wird möglichst vermieden, unnötige programmiertechnische Extravaganzen – z.B. beider Benennung von Klassen und Methoden – einzusetzen, und sich an den gängigenStandards orientiert. Trotzdem gibt es – wie Sie im Laufe dieses Buchs sicherlich erken-nen werden – Bereiche, in denen Magento eher konfigurationsbasiert arbeitet.

Was programmiertechnische Freigeister, die sich zum ersten Mal mit einem PHP-Frame-work beschäftigen, möglicherweise zunächst als Einschränkung empfinden, wird sichsehr schnell als vorteilhaft erweisen, da diese Konventionen Zeit und Arbeit sparen. Wer-fen wir zunächst einen Blick auf einen Klassennamen: Mage_Customer_Block_Form_Login.

Diesem Namen liegt ein System zugrunde, das, wenn Sie sich ein wenig damit auseinan-dergesetzt haben, Ihnen die Arbeit mit Magento sehr erleichtern wird. Die durch Unter-striche voneinander getrennten und jeweils mit einem Großbuchstaben beginnendenBestandteile des Klassennamens lassen sich wie folgt auflösen:

MageHierbei handelt es sich um den Namespace, dem das jeweilige Modul zugeordnet ist.Mehr zum Thema Namespaces können Sie in »Code-Pools und Namespaces«, aufSeite 8 nachlesen.

CustomerDer zweite Teil des Klassennamens bezieht sich auf den Namen des Moduls, zu derdie Klasse gehört. In Kapitel 2 erfahren Sie weitere Details zum Aufbau vonMagento-Modulen.

BlockBei der vorliegenden Klasse handelt sich sich um einen Block. Sie ist daher auch imBlockverzeichnis des jeweiligen Moduls abgelegt. Details zum Thema Blöcke findenSie in Kapitel 4.

Zur Geschichte des Zend FrameworkWie es der Name schon vermuten lässt, wurde das angesprochene Framework von derFirma Zend erdacht und entwickelt, die gemeinhin als die PHP-Firma gilt und mit derEntwicklung von PHP 5 wesentlich zur aktuellen Version der Sprache beigetragen hatsowie dazu, dass PHP auch auf Enterprise-Niveau seinen Außenseiterstatus verlorenhat. Das ZF wurde erstmalig im Herbst 2005 vorgestellt und im Frühjahr 2006 als Pre-Alpha-Version 0.1.1 unter der BSD-Lizenz veröffentlicht. Die erste produktive Version1.0 erschien ein gutes Jahr später. Das Framework basiert auf PHP 5 und ist striktobjektorientiert aufgebaut. Zur Drucklegung dieses Buchs ist die aktuelle Programm-version die 1.10. Die mit Magento 1.4 genutzte Version ist die Version 1.9.6.

Das Zend Framework | 3

Page 8: Programmierung, Anpassung & Integration · PDF fileDas Zend Framework | 3 Im Zend Framework und damit auch in Magento hat so ziemlich alles seine Ordnung. Beide folgen dem sogenannten

FormDieser Eintrag bedeutet lediglich, dass innerhalb des Blockverzeichnisses noch einFormverzeichnis existiert, und ist damit ein weiterer Hinweis auf den Speicherort dererwähnten Klasse.

LoginDieser letzte Teil bezeichnet den Dateinamen der Klasse.

Dies bedeutet, dass der Klassename – so lang und sperrig er auf den ersten Blick auchwirkt – gleichzeitig seinen eigenen Speicherort enthält, in diesem Fall /app/code/<code-pool>/Mage/Customer/Block/Form/Login.php.

Wir werden uns in diesem Buch lediglich auf die jeweiligen Namen derKlassen beziehen; da der Speicherort der entsprechenen Verzeichnisse dar-aus resultiert, sind Sie damit in der Lage, die jeweiligen Dateien zu findenund die Erläuterungen nachzuvollziehen.

Granularer Aufbau durch ModuleEin oft genannter Vorteil und einer der wichtigsten Gründe für den anhaltenden Erfolgvon Magento ist sein modularer Aufbau. Wie in Kapitel 2 noch im Detail erläutert wird,werden in Magento bestimmte zueinander gehörende Prozesse zu einem Modul gebün-delt. Unter einem Modul versteht man demnach eine funktionale Einheit, die unter dementsprechenden Namen und innerhalb eines bestimmten Namespace (siehe dazu denAbschnitt »Code-Pools und Namespaces«, auf Seite 8) gespeichert ist und Aufgaben wiedie Kundenverwaltung und den Bestellprozess übernimmt. Wichtige Module heißen bei-spielsweise Catalog, Checkout, Sales oder Customer.

Für jedes Modul gelten die gleichen Ordnungsprinzipien hinsichtlich seiner hierarchi-schen Struktur. Verzeichnisse und die darin enthaltenen Dateien müssen in einerbestimmten Weise benannt und angeordnet sein, um die jeweiligen Funktionalitäten fürdie Magento-Applikation bereitzustellen. Hierbei gibt es Bestandteile, die obligatorischsind – ein Modul muss beispielsweise immer eine Konfigurationsdatei config.xml enthal-ten – und andere, die je nach Zweck des Moduls zum Einsatz kommen oder auch nicht.

Konventionen und Best PracticesEntwickler, die sich schon eingehender mit dem ZF beschäftigt haben, werden bei derersten Durchsicht der Magento-Ordnerstruktur und des Quellcodes viele alte Bekanntewiedertreffen. Die Aufteilung der Module in Models, Controller und Helper beispiels-weise begegnen einem auch in einer Zend-Applikation; Gleiches gilt für Klassennamenbzw. deren implizierte Fähigkeit, sich über den Autoloader selbst zu laden, da der Klas-senname selbst bereits klarmacht, an welcher Stelle des Filesystems sie gespeichert ist.

4 | Kapitel 1: Der erste Eindruck

Page 9: Programmierung, Anpassung & Integration · PDF fileDas Zend Framework | 3 Im Zend Framework und damit auch in Magento hat so ziemlich alles seine Ordnung. Beide folgen dem sogenannten

Man könnte nun erwarten, dass jedes Modul so gekapselt ist, dass in einem dediziertenModulverzeichnis alle zugehörigen Programmbestandteile abgelegt sind. Dies ist jedochnicht der Fall, denn jedes Modul besteht aus einem funktionalen und einem gestalte-rischen Teil. Auch wenn wir hier der näheren Erläuterung in Abschnitt »/app/code/«, aufSeite 8 ein wenig vorgreifen: Ersteren finden Sie in der gesamten Magento-Verzeich-nisstrukur in /app/code und Letzteren in /app/design wieder.

Der Grund liegt – wie wir bei der Diskussion des MVC-Pattern im Abschnitt »Das MVC-Pattern«, auf Seite 11 noch sehen werden – in der Trennung zwischen Programmlogik unddem Teil, der für die Ausgabe und Formatierung (der sogenannte View) zuständig ist.

Die Modul-ProgrammlogikWie Sie Laufe der folgenden Kapitel noch genauer sehen werden, gehören zu denBestandteilen eines Moduls Klassen für die verschiedensten Einsatzbereiche: Sie sorgenbeispielsweise dafür, dass relevante Daten (z.B. Produkt- oder Kundendaten) in Objektengespeichert und damit der Applikation zur Verfügung gestellt werden. Diese Klassengenerieren also die Models bzw. Resource-Models, die Ihnen in Kapitel 3 noch begegnenwerden. Eine zweite Art von Klassen generiert die sogenannten Blöcke, also Teile derView-Schicht, die für den Transport der durch die Models bereitgestellten Daten zurAusgabe im Browser verantwortlich sind. Eine dritte Art von Klassen sind die sogenann-ten Helper-Klassen, die, wie es der Name vermuten lässt, kleinere und generische Hilfs-methoden bereitstellt, die beispielsweise Übersetzungen übernehmen oder Preise korrektformatieren.

Module vs. ExtensionsSowohl Varien – die US-amerikanische Firma, die Magento konzipiert hat und dessenEntwicklung aktiv vorantreibt – als auch die gesamte restliche Magento-Welt verfährt mitden technischen Begrifflichkeiten leider nicht so einheitlich, wie man sich das wünschenwürde. Es herrscht unter anderem Unsicherheit darüber, worin sich Module und Exten-sion unterscheiden bzw. wann genau der eine oder der andere Begriff verwendet werdensoll.

Wir haben uns entschlossen, das Wort Modul immer dann zu verwenden, wenn es sichum Core-Module handelt, die nach einer Standardinstallation vorhanden und unter /app/code/core/Mage/ abgelegt sind. Demgegenüber verstehen wir unter einer Extension eineEigenentwicklung, die ebenfalls Funktionalitäten für Magento bereitstellt, jedoch entwe-der unter app/code/community oder unter app/code/local auf Ihrem Server abgelegt ist.

Extensions sind exakt so aufgebaut wie Module, deshalb werden diese beiden Begriffeauch gern synonym verwendet. Erstere sind aber in den meisten Fällen ungleich wenigerkomplex als die Module, die letztlich den Magento-Kern darstellen.

Granularer Aufbau durch Module | 5

Page 10: Programmierung, Anpassung & Integration · PDF fileDas Zend Framework | 3 Im Zend Framework und damit auch in Magento hat so ziemlich alles seine Ordnung. Beide folgen dem sogenannten

Index

Aab2 196Abstrakte Model-Klassen 55Access Control Lists (ACL) 22, 38, 161, 250ACL-Ansicht 251Actions 93actions-Methoden 95<active> 24addCss 106addItem 106addItemRenderer() 94addJs() 106addLink() 94, 99Admin-Grid XII, 239Adminhtm-Controller 242<adminhtml> 22Admin-Menü 242Admin-Panel 9, 15, 75, 239ags 216AJAX 2, 73, 102AJAX einer Vergleichsliste hinzufügen 117AJAX-Controller 122AJAX-Request 104, 117AJAX-Updates 105AP 190Apache-Direktive 77Apache-Konfiguration 218APC 192, 203API-User 188Array 247asynchrone Caches 205Attribute 46Attributsets 46Attribut-Source-Model 124

Attributtypen 46Attributwerte 47Autoloader-Methode 19

BBase URL 201base-Package 75Benutzeroberfläche 73, 74Bestätigungsmeldungen 118Bestellgewicht 224Bezahlmodul 223, 236Block 73, 82, 116<block>-Tag 83Blockanweisung 83, 87Blockausgaben 74Block-Caching 192, 205Blöcke XI, 77Blockklassen 80Blockstruktur 78Blocktyp 100Breadcrumb-Leiste 244Break- und Watchpoints 106Browserausgaben 9, 77Bugfixes XVIIBundled Product 235

CCache 42Cache Expiry Lifetimes 199Cache Lifetime 207Cache Tags 207Cache-Control 200Cache-Control-Header 199

| 283

Page 11: Programmierung, Anpassung & Integration · PDF fileDas Zend Framework | 3 Im Zend Framework und damit auch in Magento hat so ziemlich alles seine Ordnung. Beide folgen dem sogenannten

Cache-Schlüssel 206, 212Caching XII, 191, 193__call 57CANCELED 268Checkout 269CLOSED 268CMS-Modul 91CMS-Seite 130Code-Pool 8<codePool> 24Code-Profiling 197Code-Trunks XVCollections XI, 59Community XVICommunity Advisory Board XVICOMPLETE 268Concurrency-Level 196config.xml 18Configurable Product 235Controller 21, 64, 242Controller-Action 91, 142Convention over Configuration 3Cookies 208Core XVIICore-Blöcke 19Core-Controller 64Core-SOAP-API 171Core-Templates 101Countable-Interface 59CRM-System 171Cronjob XII, 257, 258Cron-Skript 258Cron-Tabelle 258CSS 74CSV-Datei 21Custom Layout-Updates 95

DDataFlow 171Datenaustausch 20Datenbankressourcen 62Datenbankstruktur 49Datenbanktabellen 6Datenhaltung XIDatenmodell 240Datenmodellierung 45Datenquellen 12Datenschicht 11Debug 78debug 198

Debugging 127<default>-Handle 88default-Theme 75<depends> 24, 113Deployment XII, 215DHTML 104Drittsysteme 171dry run 217dynamische URLs 14

EEAV-Modell XI, 45, 242EAV-Tabellen 51Eingabemasken 239Eltern-Kind-Beziehung 85E-Mail-Template 255Entity 45, 46, 239Entity-Attribute-Value 45Entwicklungsumgebung XVERP-System 171, 172Event-Observer 21Event-Observer-Methode 20, 33, 152, 163Events 21Extensions 5, 17

FFactory-Pattern 58FastCGI 212Fiddler 194Fieldsets 137Filtern 61Firebug XV, 106Firefox XVFirefox-Add-on 106Flash 74Flat Tables 45Flat-Catalog 192, 254FollowSymlinks 218Formularvalidierung 73, 103Forum XVIForward Proxys 200, 202FrontController 13Frontend XI<frontend> 20

GGanzseitiges Caching 208Geltungsbereich 47, 78Geschäftslogik 83

284 | Index

Page 12: Programmierung, Anpassung & Integration · PDF fileDas Zend Framework | 3 Im Zend Framework und damit auch in Magento hat so ziemlich alles seine Ordnung. Beide folgen dem sogenannten

Gestaltungslogik 83getChildHtml() 85getData() 56Getter-Methode 56, 149, 227, 235ginx 208GIT XVGlobal 48<global> 19grand total 148Granularer Aufbau 4

HHandle 88, 245header-Block 88Helper-Methoden 82Highslide 176HOLDED 268.htaccess 199HTML-Ausgabe 6HTTP-POST 175HTTP-Request 13, 105

IIDE XIVImporter 178IndexAction() 27Inhaltsblöcke 6, 10, 28, 78, 88, 245Installations-Skripte 19, 39, 65, 114Interfaces 9, 74Inventory Item-Models 172Invoice 152Invoice-Instanz 268IteratorAggregate-Interface 59

JJavaScript 73, 102JavaScript-Frameworks 2JavaScript-Klassen 107JavaScript-Objekte 108JavaScript-Pop-up-Fenster 176jQuery 108JSON 119JSON-Objekt 122JS-Proxy 105

KKategoriebaum 110Kategorie-Model 113

Kategorienliste 113Kindblock 84, 88, 155Kind-Elemente 84Klassenbrowser XVKlassendefinitionen 81Knoten 97Konfigurationsdatei 4, 17Konfigurationsmöglichkeiten 239Konfigurationswerte 156Kontrollstrukturen 81

LLandingpages 130Lasttests 196Layout 74<layout>-Knoten 97Layoutanweisungen 82, 85, 87Layoutblock 112Layoutdatei 6, 10, 88Layoutdateien 18, 20Layouts XI, 10, 85Layout-Updates 88, 97Layout-XML-Datei 86, 244Lieferadresse 224Listenelemente 112loadClass() 26local.xml 203Login-Status 92

MMage

app() 15getModel() 58getSingleton() 58getStoreConfig() 225run() 15

Magento Community Documentation XVIIMagento Community Edition Roadmap XVIIIMagento Contributor Agreement XVIIMagento-Blog XIXMagento-Cache 64MagentoConnect IX, 8, 26MagentoConnect-Manager 8Magento-Extensions XIMagento-Model-Objekt 56Magento-Podcast XXMagento-Profiler 197Magic-Getter 113magische Funktionen 56

Index | 285

Page 13: Programmierung, Anpassung & Integration · PDF fileDas Zend Framework | 3 Im Zend Framework und damit auch in Magento hat so ziemlich alles seine Ordnung. Beide folgen dem sogenannten

Maximalgewicht 223, 224Maximalwert 224Memcached 204, 208Method Chaining 60MIME-Type 212mod_cache 200mod_disk_cache 200mod_proxy 200Models XI, 5, 12, 20, 55, 240Model-View-Controller-Architektur 45Modul-Programmlogik 5Multiselect 52Multishipping-Checkout 270MVC-Pattern XI, 1, 11MySQL 11, 45

NNagios 215, 219Nameserver 203Namespaces 8NEW 268Newsletter-Anmeldung 99Nutzerrechte 161Nutzerverwaltung 188

OObjekt-Attribute-Value-Modell 46objektorientierter Programmierung XObserver 35, 173onClick-Event 121, 178Onepage-Checkout 73, 103, 105, 269OOP XOpcode Cache 192Open Source XVIOrder 137, 152order_creditmemo 148order_invoice 148Order-Item 152Order-Model 138, 154Order-State 267Order-Status 267

PPackages XI, 9, 74Paketberechnung 228Patches, XVIIPath Hints-Funktion 78Payment-API 269

Payment-Methoden 237Payment-Module 236, 268PayPal-Express 237PayPal-Modul 237PayPal-Standard 237PENDING_PAYMENT 268Performance XIIPersistenzschicht 12, 63PHP include_path 58phpdoc XVIIPHP-Framework XIphpMyAdmin 51Pipelining 202Präsentationsschicht 11Preisfindung 123Primary Key 68PROCESSING 268Product Flat Table 45Product-Collection 128Progress-Bar 269Prototype 102, 120Prozesslogik 13

QQuery Cache 192Quote 137, 148Quote-Item 152, 154, 228Quote-Model 138, 163

RRabatte 123Rate_Request-Model 228reguläre Ausdrücke 31relationales Datenbanksystem 12Release-Management XII<remove> 93Replacements 34Requestzyklus 2, 15, 21, 198Resource-Models XI, 5, 12, 20, 62, 240Response-Objekts 64Result_Method-Objekt 234Result-Objekte 229Reverse Proxy 193Reverse Proxy-Verfahren 199Rewrites 30root-Block 84Root-Template 93Router 14, 20, 21, 64, 242RSS-Feeds 11

286 | Index

Page 14: Programmierung, Anpassung & Integration · PDF fileDas Zend Framework | 3 Im Zend Framework und damit auch in Magento hat so ziemlich alles seine Ordnung. Beide folgen dem sogenannten

Ssaisonales Theme 76scopes 47script.aculo.us 102Seiten-Reload 117seitenspezifischen Updates 88Select 52setData() 56setFrameTags() 120setTemplate() 93, 101Setter-Methoden 56, 154Setup-Klassen 144, 253Setup-Resource 40Setup-Skripte 144, 145, 154Shipping 148Shipping-API 236Shipping-Instanz 268Simple Products 235Skeleton-Template 93, 95Skin 74sku 54SOAP-API 173SOAP-Client 190Sortieren 60Source-Model 114, 115, 254Spaltenbreite 247Spaltenüberschriften 247Sprite-Grafiken 196SQL 59Standardansicht 113Standard-Helper-Klasse 94Standard-Updates 88, 89Standard-View-Mode 113statische Blöcke 130, 178Steuerungsschicht 11Stock Keeping Unit 54StoreView 48, 78, 160Strukturblöcke 6, 10, 28, 78, 89Subversion 216suchmaschinenfreundliche URLs 14SVN XVsvn checkout 218svn log 217symbolische Links 217Syntax-Highlighting XVSystemintegration XIISystemkonfiguration 8, 251Systemperformance 194

Ttabellarische Versandkosten 223Tabellensets 54Tabellenzelle 247Templates XI, 10, 29, 74, 81, 82Template-Sprache 81Template-Verzeichnis 6Testsystem XIVThemes XI, 9, 74$this->getStoreCategories() 113Timer 197Total-Model 144translate.csv 22Translation 21Tree-Navigation 110type-Attribut 83

UÜbersetzungen 20, 21, 82unsetChild 98unsetChildren 93unsetData 57Unterstrich-Unterstrich-Helper 247Unterstrich-Unterstrich-Methode 82, 125Update-Fähigkeit 32, 77Update-Handles 88, 98, 245Update-Skripte 19, 39, 253URL-Parameter 242URL-Rewrite-Tabelle 14URL-Rewriting 14Usability 113Uservoice XVIII

VValidation.js 104Varien_Object 56Vererbung 55Vergleichsliste 117Versionierung XIIVersionskontrolle XVVerzeichnisstruktur 2, 6, 17, 25, 77View-Mode 114Virtual-Host-Konfiguration 200, 203

WWarenwert 223Webservices 11, 171Website 48, 78, 160

Index | 287

Page 15: Programmierung, Anpassung & Integration · PDF fileDas Zend Framework | 3 Im Zend Framework und damit auch in Magento hat so ziemlich alles seine Ordnung. Beide folgen dem sogenannten

Whole Page Caching 192, 208Widget 130Wiederverwertbarkeit 17

XXML 10

Yyklus 15

ZZahlart-Model 237, 268Zend Framework XI, 1, 2Zugriffsrechte 38

288 | Index