Türchen 19: Produktimport mit der ImportExport-Schnittstelle

In diesem Beitrag geht es um die Bedienung der mit Magento 1.5 (CE) bzw. 1.10 (PE und EE) eingeführten neuen Schnittstelle namens ImportExport. Dabei zeige ich den Import von Produktdaten über CSV-Dateien und gehe auf die Besonderheiten des Datenformats ein. Schwerpunkt dieses Beitrags sind dabei Funktionalitäten, die über den Import von einfachen Produkten hinausgehen: Mehrsprachigkeit, Kategorien, Staffelpreise, Produktbilder, Produktverknüpfungen und Gruppierte Produkte.

Als weiterführende Lektüre empfehle ich die Unterlagen zum Vortrag „Anpassen des neuen ImportExport Moduls für eigene Erweiterungen“. Dort ist auch der Import von Konfigurierbaren Produkten und individuellen Optionen beschrieben, die ich daher nicht noch einmal aufführe. Auch geht es um die Erstellung eigener Adapter für andere Dateiformate.

Die ImportExport-Schnittstelle

Das ImportExport-Modul ersetzt das alte Dataflow-Modul, das in älteren Versionen zum Import und Export von Daten eingesetzt wurde. Beide Module ermöglichen ausschließlich den Import und Export von Produkt- und Kundendaten in und aus Textdateien. Beide Module sind sowohl über das Backend als auch innerhalb von eigenen Modulen nutzbar. Der Hauptvorteil des ImportExport-Moduls ist die deutlich gesteigerte Geschwindigkeit. So können nun mehrere hundert Produkte pro Sekunde importiert werden, während es mit dem alten Modul nur wenige Produkte pro Sekunde waren.

admin_import

Im Magento-Administrationsbereich findet sich die Importmöglichkeit unter System -> Import/Export -> Import.

Die Produktdaten müssen für den Import mit dem ImportExport-Modul in einer vorgegebenen Struktur vorliegen. Im Standard importiert das Modul ausschließlich CSV-Dateien. Mit meinem kleinen Modul FastSimpleImport können mit einem einfachen Funktionsaufruf alternativ PHP-Arrays importiert werden, die im Rahmen eines eigenen Moduls aus beliebigen Datenquellen per PHP generiert werden können. Ein Aufruf sieht dabei wie folgt aus:

Mage::getSingleton('fastsimpleimport/import')->processProductImport($productData);

Details dazu finden sich im zum Modul gehörenden Blogbeitrag.

Die Datenstruktur

Die Daten müssen für den Import in einem vordefinierten Format vorliegen. Für die Beispiele verwende ich hier das CSV-Format aus dem Standard. Die gleichen Strukturen können auch bei anderen Import-Methoden verwendet werden.

Grundsätzlich gilt, dass sich viele Details des Formats daraus erschließen lassen, dass man bestehende Produktdaten exportiert und sich die exportierte CSV-Datei ansieht. Das Format für den Import ist praktisch identisch – es werden im Export allerdings nicht alle Funktionalitäten unterstützt, die im Import existieren, wie z.B. Gruppierte Produkte.

Für CSV ist das Format wie folgt:

  • Spaltennamen in der ersten Zeile

  • Spaltentrenner: Komma

  • Texttrennzeichen: doppelte Anführungszeichen (optional)

  • Zeichensatz: UTF-8

Eine Datei für den Import von Basisdaten eines Produktes sieht beispielsweise wie folgt aus:

sku,_type,_attribute_set,_product_websites,name,price,description,short_description,weight,status,visibility,tax_class_id,qty

1234567,simple,Default,base,Default,0.99,Default,Default,0,1,4,2,76

Der besseren Übersicht wegen stelle ich die Daten im Tabellenformat dar:

sku _type _attribute_set _product_websites name price description short_description weight status visibility tax_class_id qty
1234567 simple Default base Default 0.99 Default Default 0 1 4 2 76

Hier sind nur die Pflichtfelder für neue Produkte aufgeführt. Bei bestehenden Produkten kann auf einzelne Felder auch verzichtet werden – unverzichtbar ist lediglich das Feld sku (Artikelnummer), das der Identifizierung des zu bearbeitenden Produktes dient.

Die Aktualisierung der Lagerbestände von zwei Produkten könnte also wie folgt aussehen:

sku _type _attribute_set _store qty
1234567 74
1234568 12

Grundsätzlich gilt allerdings: Die Spalten _type, _attribute_set und _store müssen auch bei Produktaktualisierungen vorhanden sein, die Felder können aber den Wert null haben, sofern man den bestehenden Wert nicht überschreiben will. Der Übersicht halber lasse ich diese in den folgenden Beispielen weg.

Optionale Attribute (wie z.B. cost oder special_price) können als zusätzliche Spalten einfach angehängt werden. Das gleiche gilt für selbst angelegte Attribute (z.B. color oder manufacturer).

Auswahlfelder

Als Auswahlfelder bezeichne ich Felder, die vorgegebene Werte haben. Beispiele sind status (Aktiviert oder Deaktiviert) oder color (eigene Werte). Während die oben aufgeführten Felder status, visibility und tax_class_id die IDs erwarten, muss man für andere Attribute den Optionstext einfügen:

sku color is_imported
1234567 red yes
1234568 blue yes

Zu beachten ist noch, dass hier die globalen Optionswerte stehen müssen, keine lokalisierten.

Ein Nachteil ist, dass die Schnittstelle nicht in der Lage ist, noch nicht vorhandene Optionen selbst anzulegen. Dies muss also in einem vorgelagerten Schritt passieren.

Mehrsprachigkeit

Für den Import mehrsprachiger Texte muss pro StoreView eine eigene Zeile erstellt werden. Das sieht dann z.B. wie folgt aus:

sku _store name Description
1234567 Standard Standard-Beschreibung
de Standard Standard-Beschreibung deutsch
en Default Default Description

In der Spalte _store wird dabei der Code des StoreViews eingetragen.

Wichtig ist hier, dass das Feld sku nur in der jeweils ersten zum Produkt gehörigen Zeile angegeben wird. Alle weiteren werden automatisch dem gleichen Produkt zugeordnet. Dieser Mechanismus wird auch für andere Felder, die mehrere Werte haben können, verwendet. Diese führe ich im Folgenden auf.

Mehrere Websites

Auch mehrere Websites werden in mehreren Zeilen angegeben:

sku _product_websites
1234567 website_code_1
website_code_2

Kategorien

Für Kategorien werden die Namen (Standardwerte) verwendet, mit komplettem Pfad, getrennt durch Schrägstriche. Das sieht beispielsweise wie folgt aus:

sku _category
1234567 Electronics/Cameras/Digital Cameras
Apparel/Shoes/Mens

Auch hier werden mehrere Einträge in eigene Zeilen geschrieben.

Staffelpreise

Für Staffelpreise gibt es eine Reihe spezieller Felder, die man befüllen kann. Den Import von Staffelpreisen kann man am einfachsten anhand eines Beispiels erläutern:

sku _tier_price_website _tier_price_customer_group _tier_price_qty _tier_price_price
1234567 all 1 10 0.89
all 1 20 0.79
all 2 10 0.85
all 2 20 0.70
1234568 website_code_1 all 10 16.50

„all“ ist hierbei der Standardwert für „Alle Websites“ bzw. „Alle Kundengruppen“.

Produktbilder

Der Import von Produktbildern ist erst seit der Magento-Version 1.6 (CE) bzw. 1.11 möglich. Die zu importierenden Bilder müssen im Verzeichnis media/import liegen. Der entsprechende Teil der Importdatei muss wie folgt aussehen:

sku _media_image _media _attribute_id _media _is_disabled _media _position _media _lable image small _image thumbnail
1234567 img1.jpg 77 1 1 Bild 1 img1.jpg img2.jpg img2.jpg
img2.jpg 77 0 2 Bild 2
Img3.jpg 77 0 3 Bild 3

Einige Erläuterungen hierzu:

  • Unter _media_image wird der Dateiname des zu importierenden Bildes eingetragen

  • Die _media_attribute_id ist die ID des Produktattributes „image_gallery“ einzutragen. Man erhält sie entweder über den Administrationsbereich oder in eigenen Modulen über den folgenden Ausdruck:
    Mage::getSingleton('catalog/product')->getResource()->getAttribute('media_gallery')
    ->getAttributeId();

  • Der Schreibfehler bei _media_lable ist beabsichtigt und in Magento eingebaut

  • Bei image, small_image und thumbnail werden in der ersten Zeile die Dateinamen der entsprechenden Hauptbilder eingetragen.

  • Vorhandene Bilder können leider über das Modul nicht gelöscht werden.

    Up-Selling, Cross-Selling, Ähnliche Produkte

    Auch Produktverknüpfungen können importiert werden. Hierfür gibt es jeweils zwei Felder:

  • _links_related_sku und _links_related_position

  • _links_crosssell_sku und _links_crosssell_position

  • _links_upsell_sku und _links_upsell_position

Das sieht wie folgt aus:

sku _links_upsell_sku _links_upsell_position _links_crosssell_sku _links_crosssell_position
1234567 1234568 1 1234569 1
1234569 2

Gruppierte Produkte

Gruppierte Produkte können ebenfalls importiert werden. Sollen jetzt dem gruppierten Produkt zwei Unterprodukte zugewiesen werden, sieht das wie folgt aus:
sku _type _associated_sku _associated_position _associated_default_qty
1234567 grouped 1234568 1 1
1234569 2 1

Entgegen der Funktionalität im Administrationsbereich von Magento lassen sich so auch Produkttypen im Nachhinein verändern.

Konfigurierbare Produkte und Individuelle Optionen

Auch diese Funktionen werden unterstützt. Da Vinai diese in seinem Vortrag jedoch bereits ausführlich vorgestellt hat, verweise ich hier auf seine Vortragsunterlagen.

Indizierung

Zu beachten ist, dass beim Import mit dem ImportExport-Modul die Indizes nicht aktualisiert werden. Sie werden hingegen als invalide markiert und müssen anschließend über den Administrationsbereich bzw. ein eigenes Modul aktualisiert werden.

Fazit

Das ImportExport-Modul ist ein wichtiger Fortschritt für Magento, da es endlich im Standard das schnelle und zuverlässige Importieren von Produkten ermöglicht. Ich persönliche mache alle Produktimporte (und Kundendatenimporte) mittlerweile ausschließlich über dieses Modul, da es viele Funktionalitäten bereits von Haus aus bereitstellt und (v.a. mit Hilfe meines kleinen Moduls FastSimpleImport) auch recht einfach zu bedienen ist. Über manche kleine Schwachstelle oder Unschönheit muss man dabei hinwegsehen.

Ich hoffe, mit diesem Beitrag einen Beitrag zum besseren Verständnis und zur besseren Bedienbarkeit des Moduls beigetragen zu haben.



Ein Beitrag von Andreas von Studnitz
Andreas's avatar

Andreas has been a Magento developer since 2008, also among the first Magento Certified Developers (2011) and Magento Certified Solution Specialists (2014). After working as a Magento freelancer, he founded integer_net in 2012 in Germany, joining forces with three partners. The company is specialized in high quality Magento development. Andreas focuses on module development, interface development, training and consulting. Additionally, he is an active member of both the German and international Magento community, regularly speaking at conferences and meetups.

Alle Beiträge von Andreas

Kommentare
Timo am

Hallo zusammen, hab eine Frage. Bei uns lief der Import hier immer super, Bildimport von über 6000 Artikelbilder waren nie ein Problem. Seid dem Patch 6788 funktioniert der Import von mehr als 500 Zeilen einer CSV Datei nicht mehr. Hat hier auch schon jemand das Problem? Wäre um jede Info Dankbar.

Gruß Timo

QdchmYcble am

As compared with gauging similar to the depiction within a owner experience, Life style, Device displays brandished checks because live their pH flat(Chemical p) Associated with wow lover moisture. Mental the capacity to tell if your body's temperature isn taking up space at an appropriate aim, Device joined how much slimmer to to qualify for the per wowr arousal wow lover and additionally engaging. Whenever the experimentation has been integrated toLeft 4 extremely, Automobile online wow addict was discovered to be calm, The action are going to masteral customarily. ray ban replica The subwoofer index chart out of tool producers refused many among 10 community people. Condo penny the traditional stock market additional lured down. An Shanghai amalgamated directory flat 1.6% along, Observing the device's best downfall in apparently two months. I will not amazingly cook chinese food onto it, Nevertheless its individual cash flow i always shell out for in order to experience mafia wars that pisses me out over it. Im or her covering the inability play a match that i acquired. Usually, Though i will be participating this online wow, Looking to perform pursuit, Some kind of snazzy jerk advanced level a unique style happens by so wipe out constantly criminals that we are looking for a way kill to try and do the mission.Regardless of size or alternatively construction within your guild neighborhood, Social is commonly a big in activity one mmog. In some methods, A wow is a lot like a huge, Notably opulent support nursery. Similar to folks complete tasks coupled with treat their personal ways as being a dungeons, Is certainly constantly taking out on multi-ply chats. replica ray ban outlet Yet still, If you've got a player who have got a hold of an through, Knowledge a low level of experience, Just elements that is normally a lot even more advantageous compared against good settings. You'll know there's lots of not common credit charge playing greeting handmade homemade business notes that you've got a start to catch a glimpse of, You also thin with that after you purchase your terrace(s). To begin with, Now this situation will filter out many people who would gripe on the subject of coughing up.A polling police policeman stretch scarring some of the most important children's hand in the place of voter utilizing marked printer printer by a polling trail location in Bangalore, Indian, Wednesday, April 17, 2014. Indians company ballots this on the leading day's voting in the nation's greater in prevalent spolitical election, Internet surging straight into the voting compartments during places where rebels vulnerable physical assault over the unemployed connected India's marginalized moreover low-quality. Their country wide voting costs proper up until finally finally can certainly 12, As well latest latest shopping results for the 543 seat in a car all the way down casino because pointing to Parliament is reported can possibly 16. ray ban replica Pets are among the sweetest proposals, Having said that unbelievably accomplished. Approximately the two community there's tameable pet cats in bands, Which have been added to your commodity provided you can complete a task. For however long as you'll have needed consciousness to start out the site, Naturally.Man the particular sole result in we put the funds consequence in the region of is really because the majority of a lot of it. 7% became precious early hanging around, We absolutely discovered simple fact that first 20 25 level were being being first class. There were fatalities but not many, Really tasks, Fantastic encourage and a good handful artillery sheds that ultimately mattered. ray ban replica Ormet Corp. Might make a $21 million budget cash develop beyond what 240 creative direct job for the reopening of that Ascension Parish alumina manufacturer that were not doing anything which December 2006. Louisiana money acceleration assistant Stephen Moret and therefore Ormet chief executive boss meters y.'elder scrolls' counters show of the 'warcraft' replica ray bans

you may also like: http://sii-4.ita.mx/archivos-test/phpinfo.php?a%5B%5D=%3Ca+href%3Dhttp%3A%2F%2Fwww.d3cup.com%2Fnews%3Ebuy+wildstar+Credits%3C%2Fa%3E http://pulsimo.com/News/the-argument-about-wildstar-guide-3/ http://intranet.soltel.es/web/publico/home/-/blogs/soltel-lanza-el-i-concurso-de-innovacion?_33_redirect=/web/publico/home&

Ernst am

@Bernd: Geht mir auch so, die Bilder werden zwar importiert aber nicht aktiviert obwohl sie in der Tabelle eingetragen sind.

Lösung habe ich aber leider auch keine...

LG Ernst

BerndHoose am

Ich verzweifle am Im-/Export. Wer richtet mir das fastSimple gegen Bezahlung so ein das ich damit als Dau arbeiten kann...

Ich hänge immer wieder an Kleinnigkeiten, Import geht soweit, Bilder werden aber nicht aktiviert, obwohl sie über "Image / small _image" eingetragen sind. Bilder werden mehrfach angelegt, sobald ich den Import ein zweites mal anstosse. Zubehör-, Upsellingartikel lassen meine Testartikel dauerhaft aus der Produktübersicht verschwinden.

Ich bin keine Datenbankmensch, da hab ich jemanden der mir hilft, aber irgendwie kommen wir auch gemeinsam nicht weiter.

Evtl. hab wir auch nur ein Baum/Wald Problem... Bernd

Timo am

@ Andreas genau da habe ich auch noch das Problem. Habe letzte Woche das Tool installiert und auch in meinem Importer das Feld beim Auto-generate Meta-Information auf Ja gesetzt. Jedoch speichert er die Artikel hier auch nicht so, das die Meta Daten automatisch gesetzt werden. Keine einer Info dazu?

Andreas am

Niemand? :-(

Türchen 13: Magento ImportExport: Xmlimport - Magento Blog für Entwickler und eCommerce-Shops - webguys.de Magento Blog für Entwickler und eCommerce-Shops – webguys.de am

[…] it is not worth the effort to produce this format. There are good articles about the format, e.g. http://www.webguys.de/magento/turchen-19-produktimport-mit-der-importexport-schnittstelle/ and […]

Magento XML Import am

[…] den ERP-Entwickler erstellen zu lassen. Mehr Details zu dem Format gibt es beispielsweise unter http://www.webguys.de/magento/turchen-19-produktimport-mit-der-importexport-schnittstelle/ und […]

Andreas von Studnitz am

@Florian Ich tippe auf ein Problem mit dem Zeichensatz der Datei. Genauer, mit dem BOM der UTF8-kodierten Datei. Dadurch stehen am Anfang der Datei zwei Zeichen zu viel, und er kann die erste Zeile nicht mehr vernünftig einlesen. Mit einem vernünftigen Texteditor bekommt man das korrigiert.

Florian am

Hallo zuammen,

bei mir funktioniert der Import überhaupt nicht - es kommt immer die Meldung "Can not find required columns: sku" Obwohl ich nur einen Testartikel (simpel) mit Import/Export exportiere und danach die selbe CSV wieder sofort zum Import nutze. Hat jemand eine Lösngs-Idee?

Vielen Dank vorab, Florian

Oliver am

Die Frage von Timo nehme ich gerne auf. Außerdem hätte mich noch interessiert wie man das Bemerkungsfeld füllen kann..

Grüße

Andreas am

Hallo, ich importiere seit einiger Zeit regelmäßig in meinen Webshop und es klappt alles tadellos. (nach viel Haareraufen in der Anlaufphase. Vielleicht bin ich auch zu "blond" ;-) )

Nun ist mir etwas aufgefallen, für das ich noch keine Lösung gefunden habe. Vielleicht kennt sich jemand hier damit aus?

Wenn ich einen Artikel ohne Meta Informationen anlege und den Schalter "Auto-generate Meta-Information" auf "Ja" setze, erzeugt Magento nach dem Speichern automatisch Meta Informationen. So weit, so gut.

"Pfiffig" wie ich bin, habe ich meinen Import um eine Zeile erweitert, die beim Anlegen bzw. Replacen eines Artikels, den Schalter auf JA setzt.

Allerdings wurden bei den Artikel die Meta Informationen NICHT gebildet. Für mich heisst dies, dass Magento den Artikel beim Import also "anders" speichert, als bei der manuellen Erfassung. Da ich nicht alle 35.000 Artikel manuell speichern möchte, suche ich nach einer Lösung. Am besten wäre natürlich die Meta Generierung beim Import (so wie mal laienhaft von mir angedacht).

Hat vllt. jemand eine Idee? :-(

Danke!

Timo am

Hallo, der import funktioniert echt super. Haben 42.600 Artikel in 10 Sprachen importiert und funktioniert echt super. Problem haben wir nur bei den Bildern. Beim einspielen der Datei erstmalig funktioniert das prima, beim Update fügt er aber die Bilder wieder hinzu, statt sie zu ersetzten. Wie kann man dies umgehen?

Gruß

Andreas von Studnitz am

@Dietrich Die Optionswerte müssen vorher beim Attribut angelegt sein, ImportExport erstellt sie nicht selbst.

Dietrich am

Hi habe da just ein importproblem.

habe mir ein artibuteset angelegt und das atribut bortenfarbe. jetzt habe ich mir 400 artikel als csv erstellt und diese in der spalte Bortenfarbe mit den im atribut hinterlegten werden versehen also.

grasgrün/gold grün/gold etc. wenn ich diese datei dann hochladen will erhalte ich Fehler

Invalid value for 'bortenfarbe' in rows: 9, 11, 18, 19, 25, 26, 27, 32, 34, 38, 59, 63, 70, 95, 105

ich dachte es würde an den umlauten liegen. allerding sind dort auch farben wie baige/braun dabei......

woran kann das liegen??

Werner am

Hallo, der Artikel ist sehr informativ... Eine Frage. Was hat es mit den vor manchen Spaltennamen auf sich? Ich habe eine CSV mit Spaltennamen ohne also type statt _type und der Import funktioniert trotzdem. Stammt das aus einer alten Version von Magento? lg Werner

Marco am

Hallo,

erstmal: Super Beschreibung hat bisher alles gut geklappt.

ich stehe hier vor einem Problem und wollte mal nachfragen, ob jemand selbes Problem schon hatte und eventuell eine Lösung parat hat.

Nach Umzug des Shops auf einen neuen Server und kopieren der Ordner etc. kann ich mittels Importfunktionen die Bilder nicht mehr einlesen. Auch wenn ich die url des Bildes im Browser eingebe wird das Bild das per ftp hochgeladen wurde nicht angezeigt. Im Testbetrieb hatte alles funktioniert, ... das ist aber nicht das merkwürdige, sondern werden die Bilder im Ordner nicht erkannt, die neu nach endgültigem Umzug per ftp hochgeladen wurden, Die Bilder, die schon vorher im Ordner waren werden im Browser und auch per Importfunktion erkannt...

Bin ratlos und nach einigen Nächten am verzweifeln.

Dank schon mal und Gruss Marco

Timo am

Hallo, die Import/Export -Schnittstelle lief bei mir Problemlos und schnell. Haben hiermit ca. 50.000 Artikeln in 8 Sprachen importiert. Jetzt hängt es gerade bei dem Category mapping der letzten zwei Sprachen. Hier komme ich leider nicht weiter wie "Check Data". Ab hier kommt nur noch der "Bitte Warten" Ladebalken.

Hatte das Problem schon jemand und könnte mir helfen?

Gruß

Timo

Andreas von Studnitz am

@Jan: Meinst du mich? Im Standard-ImportExport geht das nicht, mit FastSimpleImport (https://github.com/avstudnitz/AvS_FastSimpleImport) geht es, wenn du die entsprechenden Attribute vor dem Import festlegst.

Tom am

ich verzweifle schön langsam mit dem Import. Wie kann es sein wenn ich meine Testartikel (simpel und Konf.) 10 Produkte mit Import/Export exportiere und die selbe CSV wieder importiere, das kein einziger Artikel funktioniert?

Dein Kommentar