Mit Hilfe des Import / Exports Plugins lassen sich große Dateimengen mittels CSV oder XML importieren.
Das Plugin "Shopware Import/Export" wird wie ein ganz gewöhnliches Plugin installiert.
Nach der Installation des Plugins solltest Du das Backend einmal neu laden, damit das Plugin in der Menüstruktur sichtbar ist. Gegebenenfalls leerst Du den Konfigurationscache und lädst die Seite nochmals neu. Das Plugin ist anschließend unter dem Menüpunkt "Inhalte" zu finden:
Die Konfiguration des Plugins bietet aktuell die folgenden Einstellungen:
Das neue Backend-Modul des Import/Exportes bietet Dir 4 Bereiche: Import, Export, Protokoll und die Profile.
In diesem Bereich findest Du die Möglichkeit verschiedene Daten zu importieren oder zu exportieren, sowie die letzten Änderungen zu verwalten.
Export
Im Export-Reiter kannst Du Exporte aus dem System im CSV oder XML Format vornehmen. Du wählst hier Dein zuvor angelegtes Profil und das Export-Format (CSV oder XML).
Abhängig vom Export-Typ (Artikel, Bestellungen, Kunde, Kategorien) werden ggf. zusätzliche Export-Optionen abgefragt, die die Exportierten Daten genauer einschränken.
Die einzelnen Filter-Möglichkeiten werden in den weiteren Artikeln zu den einzelnen Profiltypen genauer erläutert.
Sind die entsprechenden Einstellungen vorgenommen, kannst Du mit einem Klick auf den "Export"-Knopf den Export anstoßen. Hierbei erscheint zunächst ein Fenster mit der Anzahl der ermittelten Datensätze.
Ein Klick auf "Export starten" wird die Datensätze in eine Datei exportieren, die am Ende mit einem Klick auf "Herunterladen" auf dem eigenen PC gespeichert werden kann.
Wird die Datei erst später benötigt, kann Sie auch jeder Zeit im Reiter "Protokoll" heruntergeladen werden.
Import
Im Reiter "Import" können bestehende XML und CSV-Dateien in das Shopware-System importiert werden.
Die gewünschte Datei kann dabei via Drag'n'Drop in die dafür vorgesehene Zone gezogen oder über den Punkt "Datei wählen" vom lokalen PC ausgewählt werden.
Danach musst Du nur noch angeben, welches Profil für diese Datei angewendet wird. Hierbei musst Du unbedingt darauf achten, dass die Spaltennamen, bzw.
XML-Knoten-Namen genau mit den im Profil bestimmten Spalten-Namen übereinstimmen.
Jetzt kann durch einen Klick auf "Import" der Import angestoßen werden. Auch hier öffnet sich zunächst ein Fenster, das die Anzahl der erkannten Datensätze zeigt und durch einen weiteren Klick auf den "Import" Button den eigentlichen Import startet.
Der Import erfolgt in kleinen Schritten, so dass auch langsame Server bei großen Importen nicht in einen Timeout laufen.
Wird ein Import abgebrochen, kann er im Reiter "Protokoll" bequem fortgesetzt oder beendet werden.
Protokoll
In diesem Bereich findet sich eine Übersicht aller durchgeführten Operationen.
So können zuvor importierte Dateien jeder Zeit erneut eingespielt, heruntergeladen oder gelöscht werden.
Gleichzeitig haben wir die Möglichkeit, abgebrochene Importe fortzusetzen oder einzusehen, wie viele Artikel importiert wurden.
Diese Ansicht ist also eine wertvolles Tool, um die vorgenommen Import und Exporte im Blick zu behalten, die importierten Inhalte auch später noch nachzuvollziehen oder Fehler aufzuspüren.
Der Reiter "Profil" ist das Herzstück des Import/Export-moduls. Ein Profil definiert das "Aussehen" eines Importes oder Exportes, oder auch die Verknüpfung(Mapping) zu den einzelnen Datenbank-Spalten.
Das Import/Export-modul bietet bereits im Standard einige nützliche vorgefertigte Profile z.B. für die Artikelanlage, Kundenimport oder Bestellexporte.
Diese Standard-Profile kannst Du ausblenden indem Du die Checkbox "Standardprofile ausblenden" aktivierst, so bekommst Du nur Deine individuellen Profile angezeigt.
Du kannst allerdings auch ganz eigene Profile anlegen, welche genau auf Deine Anforderungen zugeschnitten sind.
Klicke zunächst auf "Profil hinzufügen", um ein neues Profil zu erzeugen. Dann wirst Du aufgefordert, einen Namen und ein Standard-Profil auszuwählen, auf welchem Dein eigenes Profil basiert.
Soll z.B. ein Artikel-Profil erzeugt werden, wählst Du als "Basierend auf" beispielsweise "Artikel minimal", den Namen kannst Du dann frei vergeben, Beispiel "Artikel - Shopware".
Nach einem Klick auf "Save" wird ein vorgefülltes Profil erzeugt, das bereits alle Felder des Basis Profils enthält.
Diesem kannst Du dann beliebig neue Spalten und Attribute hinzufügen, oder bestehende entfernen.
Auf der linken Seite im Profil-Fenster siehst Du nun einen Baum, der die XML-Datenstruktur wieder gibt.
Wenn Du ein Feld auswählst (etwa: ordernumber), kannst Du rechts den Namen des Knotens innerhalb der XML / CSV bearbeiten - und diesen beispielsweise auch "bestellnummer" nennen, genauso wie die Spalte, bzw. der Knoten später in Deiner Datei heißen soll.
Darunter kannst Du wählen, aus welcher Shopware-Spalte der Knoten befüllt wird (in diesem Fall also "orderNumber").
Zur Auswahl stehen hier alle verfügbare Spalten des aktuellen Datentyps - da zuvor "Artikel" als Typ gewählt wurde, können hier also alle verfügbaren Artikel-Felder gewählt werden.
Welche Felder für die einzelnen Profiltypen verfügbar sind findest Du in den weiterführenden Wiki-Artikeln zu den jeweiligen Typen genau erläutert.
Konfiguration des Profils
Über die Schaltflächen "Datensatz erweitern", "Neue Spalte" und "Neues Attribut (XML)" kannst Du dem Profil weitere Datenfelder hinzufügen.
Eine "Spalte" ist ein Datenfeld, das eine Information wie "Artikel-Name" beinhalten kann. Der anzuzeigende Datensatz einer Spalte wird über das Feld "Shopware-Spalte" ausgewählt, der Name der Spalte unter "Knoten-Name".
Neben Spalten gibt es in XML auch sogenannte "Attribute". Das sind Datenfelder, die in der Spalte selbst definiert werden können:
<meineSpalte meinAttribut="hallo">
Welt
</meineSpalte>
Hier gibt es einen Knoten mit dem Namen "meineSpalte" und ein Attribut mit dem Namen "meinAttribut".
Letztlich können Spalten und Attribute also gleichermaßen Daten beinhalten, es hängt von Deinen Erfordernissen und Schnittstellen ab, was Du verwenden willst.
Ein Datensatz schließlich ist ein spezielles Element für Datenfelder, von denen ein Artikel mehrere haben kann (sog. ToMany-Relationen).
Darunter fallen beispielsweise Preise, Kategorien oder Eigenschaften. Ein Datensatz hat einen Knoten-Namen (etwa "MeinePreise"), einen Adapter ("category" für Kategorien, "price" für Preise) und einen "Eltern-Schlüssel", über den beispielsweise ein Preis dem eigentlichen Artikel zugeordnet wird.
Der Datensatz selbst enthält zunächst keine Daten - werden ihm aber weitere Knoten und Attribute hinzugefügt, können hier nun die Datenfelder des entsprechenden Adapters ausgewählt werden - etwa der pseudoprice des jeweiligen Preises oder der Name der jeweiligen Kategorie.
Letztlich können Datensätze auch als "Unterprofile" verstanden werden, da Sie es erlauben, in einem Artikel-Profil weitere Informationen einzubinden, welche nicht direkt in den Artikel-Tabellen verfügbar wären.
Auf Datenbankebene ist der Datensatz wie ein join, also eine Verbindung zu einer weiteren Tabelle.
Am Beispiel des "price"-Datensatzs wäre dies z.B. die Verbindung der Hauptartikel-Tabelle (s_articles) zur Artikel-Preis-Tabelle (s_articles_prices).
Der Datensatz verschafft nur eine Verknüpfung der Tabellen, sorgt also dafür, dass die beiden Tabellen "sich kennen", gibt jedoch noch keine Daten wider.
Erst nachdem der Datensatz korrekt verknüpft ist können Felder aus der Preis-Tabelle widergegeben und importiert werden, da der Importer weiß, zu welchem Artikel die Preise gehören.
Grundsätzlich unterstützt das ImportExport-modul CSV und XML-Formate.
Auch wenn die Profil-Erstellung sehr an das XML-Format angelehnt ist: Jedes Profil kann immer auch als CSV exportiert oder importiert werden.
Das Modul wird dann statt eines verschachtelten XMLs ein flaches CSV-Format nutzen, wobei die CSV-Spaltennamen auf Basis der Knoten-Namen gewählt werden.
Wenn Du also gar kein XML-Profil benötigst, sondern nur CSV damit exportieren möchtest, kannst Du die Verschachtelung der Knoten außer Acht lassen und ein flaches Profil erzeugen, ebenso kannst Du auf Attribute verzichten.
Das oben erzeugte Profil "Artikel - Shopware" würde in CSV exportiert wie folgt aussehen:
Als XML-Export aber beispielsweise so:
Aus Performance-Gründen unterstützt der Importer nur formatiertes XML! Die verwendete Library unterstützt keine unformatierten XML-Dateien.
Dateien bearbeiten
CSV
Um CSV-Dateien zu bearbeiten oder zu erstellen sollte ein Programm wie Open Office verwendet werden, welches in der Lage ist eine Datei in validem UTF-8 Format zu erzeugen.
Aktuell ist Excel hierzu nicht gut geeignet, da dieses kein valides UTF-8 Format unterstützt. Bearbeitest Du eine Datei in Excel kann es zu Problemen mit Umlauten und Sonderzeichen kommen.
Sollte eine Datei doch einmal in einem Programm bearbeitet werden, welches kein UTF-8 unterstützt, so kann diese mit einem Programm wie Notepad ++ einfach korrigiert werden.
Hierzu öffnest Du die nicht korrekt formatierte Datei in Notepad ++ und öffnest zusätzlich eine weitere leere Datei, für diese stellst du über das Menü Kodierung manuell UTF-8 ein.
Nun kannst Du aus deiner eigentlichen Datei mit Strg-A und Strg-C den gesamten Text kopieren und mit Strg-V in die neue korrekt kodierte Datei einfügen.
Diese neue Datei speicherst Du dann als .csv Datei wieder ab und kannst Sie korrekt kodiert in das System importieren.
XML
Für die Bearbeitung von XML-Dateien kannst Du ein beliebiges Programm nutzen. Wichtig hierbei ist nur, dass die Struktur und das Format der XML-Datei erhalten bleibt.
Im Profil-Reiter des Moduls hast Du die Möglichkeit, Konvertierungen vorzunehmen.
Damit kann der Feldinhalt bei Importen und Exporten unabhängig voneinander manipuliert werden.
Auf diese Weise kannst Du beispielsweise definieren, dass das "active"-Flag eines Artikels beim Export nicht als 0 oder 1 ausgegeben wird, sondern als "aktiviert" oder "deaktiviert".
Für Importe können wir umgekehrt definieren, dass die Zeichenkette "aktiviert" als "1" und "deaktiviert" als "0" importiert werden soll.
Ebenso können Ersetzungen und andere Zeichenkettenoperation vorgenommen werden - auch mathematische Berechnungen und Bedingungen sind möglich.
Verwendet wird dazu die Smarty-Engine. Die Namen der zur Verfügung stehenden Felder können für das aktuelle Profil im Konvertierungs-Fenster eingesehen werden, nachdem ein neuer Eintrag hinzugefügt wurde:
In der Auswahlbox steht eine Liste aller Felder bereit, wie für Smarty üblich muss ein Dollar-Zeichen vor das bezeichnete vorangestellt werden, um darauf zu verweisen.
Namen auf 30 Zeichen kürzen
{$name|truncate:30}
Preis um Faktor 10 erhöhen
{math equation="x*10" x=$price}
Abfragen anderer Felder, Bedingungen
{if $attributeAttr8 < 10}
4
{else}
$attributeAttr9
{/if}
"aktiviert" und "deaktiviert" statt des active-Flags ausgeben
{if $active == 0}deaktiviert{else}aktiviert{/if}
Das Import/Export-Plugin erlaubt es, Import und Exporte auch über die Kommandozeile vorzunehmen. Weiterhin kannst Du durch Ablegen von Importen in ein vorgegebenes Verzeichnis automatisierte Importe via Cronjob laufen lassen.
Aktuell ist ein Export von Bildern via CLI nicht möglich.
Profile anzeigen
Für den Export und Import benötigst Du bestehende Profile.
Mit dem Befehl
php bin/console sw:importexport:profiles
kannst Du Dir eine Liste aller vorhandenen Profile ausgeben lassen.
Export
Aus dem Shopware-Verzeichnis heraus kannst Du mit diesem Befehl Exporte vornehmen:
php bin/console sw:importexport:export
Hierfür musst Du die folgenden Parameter angeben:
Beispiel Standard Bestellungen:
php bin/console sw:importexport:export -p "default_orders"
Beispiel erweitert mit Datum:
php bin/console sw:importexport:export --dateFrom "16-05-2021" -p "default_orders" out.xml
Beispiel erweitert von/bis:
php bin/console sw:importexport:export --dateFrom "10-05-2021" --dateTo "15-05-2021" -p "default_orders" out.xml
Das Export-Format wird über die Endung der angegebenen Datei automatisch bestimmt, endet der Name also auf ".xml", wird automatisch nach XML exportiert, endet er auf ".csv", wird nach CSV exportiert.
php bin/console sw:importexport:export --dateFrom "01-05-2021" -p "default_orders"
Weitere mögliche Parameter sind:
Import
Um eine bestehende Datei in das System zu importieren lautet der Befehl:
php bin/console sw:importexport:import
Erwartet werden die Parameter:
Beispiel:
php bin/console sw:importexport:import -p "Artikel - Shopware" in.xml
, wobei sich der Dateipfad immer auf den aktuellen Ordner bezieht. Bist Du also im Shopware Stammverzeichnis und wählst "out.xml", so muss sich die Datei im gleichen Verzeichnis, also im Stammverzeichnis liegen.
Optional möglich:
Das neue Import/Export-modul erlaubt es, CSV oder XML-Dateien in das Verzeichnis files/import_cron/ abzulegen.
Wenn der Cronjob im Standard ausgeführt wird, werden einmal am Tag alle Dateien aus dem Verzeichnis in das System importiert.
Die Dauer zwischen zwei Import-Vorgängen kannst Du natürlich in den Grundeinstellungen anpassen: (Informationen: Cronjobs).
Um eine dort abgelegte Datei zu importieren zu können, muss der Name des Profils im Dateinamen zwischen zwei Punkten vorhanden sein.
Für das Profil Artikel könnte dies z.B. so aussehen:
export.Artikel.Shopware.24.09.2014.csv
oder
Artikel.Shopware.csv
Die Importe können im Nachgang im Backendmodul unter "Protokoll" überprüft werden. Fehlgeschlagene Importe werden mit dem Präfix "broken-" im Verzeichnis files/import_export/ abgelegt.
Du kannst den Cronjob entweder direkt über die Konsole anstoßen indem Du z.B. einen Befehl wie diesen hier verwendest:
php shopware.php SwagImportExport/cron
Oder Du stößt den Cronjob über wget oder einen Browser-Aufruf an:
http://www.meine-domain.de/backend/SwagImportExportCron/cron
Ein Export der Daten ist ausdrücklich nur über die Shopware-Konsole möglich. Per Cronjobs können nur Importe durchgeführt werden!
Im Import/Export-modul gibt es die Möglichkeit erstellte Profile zu importieren, welche Du zuvor als JSON Datei exportiert hast.
Hierzu kannst Du die Schaltfläche "Profil importieren" im Reiter Profile nutzen.
Ein Profil kannst Du über den blauen Export-Button direkt in der Profil-Zeile exportieren.