Beim Magento-2-Hackathon in Paderborn am 23. und 24. Januar 2016 fand sich eine Gruppe von 9 Entwicklern zusammen, die es sich zur Aufgabe machten, die Importfunktion von Magento 2 zu verbessern. Wir entschieden uns dazu, AvS_FastsimpleImport (für Magento 1) als Beispiel zu nutzen und begannen, es für Magento 2 umzubauen. Die Hauptfunktionen von AvS_FastSimpleImport sind:
- Starten des Imports über die Kommandozeile oder in einem eigenen Modul
- Keine Restriktion auf CSV-Dateien, sondern die Nutzung von PHP-Arrays
- Vereinfachung des komplizierten Importformats durch Nutzung von verschachtelten Arrays statt mehrerer Zeilen für einen einfachen Artikel
- Ermöglichen weiterer Importtypen: Bündelartikel, Kategorien und Beziehungen zwischen Produkten und Kategorien
- Partielle Indizierung für importierte Produkte
- Download von Bildern über HTTP während des Imports
- Verbesserte Fehlermeldungen
- Viele kleine Verbesserungen
Da Punkt 5 und 6 sowie der Import von Bündelprodukten aus Punkt 4 mittlerweile bereits im Standardimport von Magento 2 integriert sind, mussten wir uns darum nicht mehr kümmern. Wir entschieden uns, die verbleibenden Aufgaben auf zwei separate Module zu verteilen:
- FireGento_FastSimpleImport2 für alles, was sich damit befasst, den Import über eigenen Code zu starten und PHP-Arrays als Quelle zu nutzen (1, 2, 3)
- FireGento_ExtendedImport2 für alle weiteren Verbesserungen, welche auch bei einem Import über das Backend genutzt werden können (4, 7, 8)
An jedem Modul arbeiteten jeweils 3 Entwickler.
Zusätzlich haben wir uns dazu entschieden, das Importformat des regulären Magento 2 ImportExport Moduls zu analysieren, da es hierzu bisher keine offizielle Dokumentation gibt. Das Ziel war es, eine flächendeckende Dokumentation zu schaffen, wie sie für Magento 1 vorhanden ist (Deutsch / Englisch). Eine erste Version wird wahrscheinlich bald veröffentlicht.
FireGento_FastSimpleImport2
Um die Basis für den Import auf eigenem Code zu schaffen, der PHP-Arrays nutzt, haben drei von uns zusammengearbeitet: Elias Kotlyar (mediawave), Nils Preuß (Polo Motorrad) und Andreas von Studnitz (integer_net). Am Ende des Tages erreichten wir das Hauptziel: wir haben ein Modul geschaffen, über das der Import mit eigenem Code ausgeführt werden kann. Dieses Modul ist auf GitHub verfügbar unter https://github.com/firegento/FireGento_FastSimpleImport2. Es kann wie folgt genutzt werden:
/** @var FireGentoFastSimpleImport2ModelImporter $importerModel */ $importerModel = $this->objectManager->create('FireGentoFastSimpleImport2ModelImporter'); $productsArray = [ [ 'sku' => 'firegento-test', 'attribute_set_code' => 'Default', 'product_type' => 'simple', 'product_websites' => 'base', 'name' => 'FireGento Test Product', 'price' => '14.0000', ], ]; try { $importerModel->processImport($productsArray); } catch (Exception $e) { $output->writeln($e->getMessage()); } print_r($importerModel->getLogTrace()); print_r($importerModel->getErrorMessages());
Natürlich kann und soll die $productsArray-Variable an die eigenen Anforderungen angepasst werden – die Daten müssen nicht hartcodiert sein. Stattdessen können sie aus XML Dateien, einer externen Datenbank oder aus anderen Quellen mit Hilfe von PHP geladen und transformiert werden.
Für den Fall, dass nur geringe Magento Erfahrungen vorhanden sind und man nicht weiß, wo der Code eingefügt werden soll, haben wir ein kleines Beispielmodul erstellt, verfügbar unter https://github.com/firegento/FireGento_FastSimpleImport2_Demo. Es bringt einige neue Kommandozeilenmethoden mit, die wie folgt genutzt werden können:
bin/magento fastsimpleimport2demo:products:importsimple
bin/magento fastsimpleimport2demo:products:importconfigurable
bin/magento fastsimpleimport2demo:products:deleteall
bin/magento fastsimpleimport2demo:customers:import
bin/magento fastsimpleimport2demo:customers:deleteall
Das Resultat sieht dann so aus:
Zusätzlich kann das Verhalten des Imports konfiguriert werden. Die Einstellungsmöglichkeiten dafür sind im Magento 2 Backend unter Stores / Configuration / Services / FastSimpleImport 2 zu finden:
FireGento_ExtendedImport2
Das Modul ExtendedImport unter https://github.com/firegento/FireGento_ExtendedImport2 deckt alle Verbesserungen ab, die sowohl über das Backend als auch über FastSimpleImport2 genutzt werden können. Es wurde von Fabian Schmengler (integer_net) und Robert Fenger (VOTUM) gestartet.
Während der Funktionsumfang von FastSimpleImport2 recht klar und fest umrissen, wird das ExtendedImport-Modul in Zukunft weiter wachsen. Wir haben mit den ersten einfachen Erweiterungen begonnen, welche fortlaufend ergänzt werden. Einige unserer Ziele:
- Verbesserte Fehlermeldungen (die ersten Verbesserungen sind bereits implementiert)
- Erstellung von Attributoptionen während des Imports
- Import von Kategorien als separater Import
- Löschen von Attributwerten (wenn ein Feld leer bleibt, wird es standardmäßig ignoriert)
Natürlich ist jede Hilfe bei der Erweiterung des Imports herzlich willkommen. Alle Ideen und Gedanken dazu helfen uns, ein nützliches Tool für die Magento-Community zu schaffen. Also teilt sie gerne mit uns!