Die seit Magento CE 1.5 verfügbare Importfunktion beschleunigt den Import von Produkten und Kundendaten deutlich. Aber wie kann man den neuen Import eigentlich in eigenen Modulen einsetzen?

Seit der Magento-Version 1.5 (Community Edition) bzw. 1.10 (Enterprise und Professional Edition) gibt es ein neues Schnittstellen-Modul namens ImportExport. Dieses importiert und exportiert Produkte und Kundendaten. Während der alte Import kaum über eine Geschwindigkeit von wenigen Produkten pro Sekunde hinaus kommt, sind mit dem neuen Modul auch mehrere hundert Produkte pro Sekunde machbar (siehe z.B. der Beitrag von Roman Zenner).

Über die Admin-Oberfläche sind die Funktionen zum Import und Export über System -> Import/Export zugänglich und relativ intuitiv bedienbar. Für einen regelmäßigen Import sollte die Schnittstelle jedoch über ein Modul bedienbar sein.

Der Magento-Import – häufiges Thema bei Magento-Konferenzen

In seinen Vorträgen bei der Magento Imagine 2011 und bei Meet Magento #5.11 hat Vinai Kopp sehr ausführlich die Verwendung des Moduls mit eigenen Import-Adaptern präsentiert.

Anpassung des ImportExport-Moduls für Magento

Das ImportExport-Modul hat im Standard-Funktionsumfang jedoch einen großen Nachteil: Es erwartet eine Datei zum Import. Möchte man stattdessen Inhalte aus einer Datenbank, einem Webservice oder einer anderen Schnittstelle verwenden, muss ein alternativer Source-Adapter implementiert werden.

Leider ist das nicht so einfach wie gewünscht, da sich die entsprechende Basis-Klasse nicht einfach wie gewünscht ableiten lässt, dank der "schönen" folgenden Klassendeklaration:

Diese Klasse ist die Basis für eigene Source-Adapter, die definieren, wo die Daten herkommen und in welcher Form sie vorliegen. An anderer Stelle wird ein Objekt der Klasse Mage_ImportExport_Model_Import_Adapter_Abstract als Source-Adapter erwartet.

Es sind also weitere Änderungen notwendig. Damit nicht jeder Entwickler sich in die Materie einarbeiten muss, habe ich ein kleines Modul entwickelt, das sich bei Github herunterladen lässt. Es beruht darauf, dass die Daten als Array vorliegen – in ein Array kann man eigentlich immer beliebige Daten konvertieren.

Das Modul lässt sich in einem eigenen Modul beispielsweise wie folgt nutzen, nachdem mein Modul installiert wurde:

Die einzelnen Elemente des übergebenen Arrays repräsentieren dabei jeweils ein Produkt bzw. eine Ausprägung eines Produktes. Werden mehrere Elemente im äußeren Array übergeben, werden mehrere Produkte bzw. Ausprägungen eines Produktes angelegt bzw. angepasst.

Weitere Einsatzmöglichkeiten für den Magento-Import

Im Beispiel sind alle Pflichtfelder angegeben. Weitere mögliche Felder sind z.B. alle Attributcodes. Es ist aber auch möglich, z.B. Inhalte für bestimmte StoreViews, Varienten von konfigurierbaren Produkte oder Staffelpreise anzugeben, hierfür werden jeweils weitere Zeilen pro Produkt verwendet. Wichtig ist hierbei, dass der Array-Index ’sku‘ existiert, er muss aber keinen Wert beinhalten.

Die möglichen Varianten kann man leicht herausfinden, indem man ein Produkt wie gewünscht im Magento-Backend anlegt und anschließend exportiert. Den Aufbau der resultierenden CSV-Datei kann man in das zu importierende Array 1:1 übernehmen.

Der Import von Kundendaten läuft analog. Der nötige Befehl lautet:

Der Hauptschlüssel ist das Feld "email" statt "sku". Weitere notwendige Felder lassen sich durch ausprobieren herausfinden (das Modul wirft eine entsprechende Exception) oder durch die Analyse einer Export-Datei.

Download bei GitHub

Andreas von Studnitz

Autor: Andreas von Studnitz

Andreas von Studnitz ist Diplom-Informatiker, Magento-Entwickler und Geschäftsführer von integer_net. Seine Schwerpunkte sind Entwicklung, Beratung und die Durchführung von Schulungen. Er ist Magento 2 Certified Professional Developer Plus und hat darüber hinaus weitere Magento Zertifizierungen für Magento 1 und Magento 2. Sowohl im Jahr 2019 als auch 2020 wurde Andreas als Magento Master in der Kategorie „Mentor“ ausgezeichnet.

Mehr Informationen