Produktexporte

Mit dem Modul Produktexporte können nicht nur vorhandene Exporte zu Preisportalen genutzt werden, sondern auch komplette Anbindungen an neue Marktplätze geschaffen werden. Durch die Verwendung eines Export-Templates, welches mit Smarty-Variablen arbeitet, kannst Du schnell Anpassungen/Erweiterungen oder neue Exporte schaffen.

Durch die verschiedenen Einstellungsmöglichkeiten ist auch die Unterstützung der verschiedenen Formate gewährleistet. So kannst Du wahlweise Text-Dateien, XML-Dateien oder auch CSV-Dateien erstellen, je nach Anforderung des jeweiligen Portals.

Bei den meisten Portalen kann ein Link zur Exportdatei hinterlegt werden. Je nach Caching-Methode wird die Datei bei jedem Aufruf neu erzeugt und das Portal erhält immer den aktuellsten Datenstand. Alternativ wird die Datei in regelmäßigen Abständen erneuert und das Portal kann die Datei wesentlich schneller holen.

Das Grundmodul

Oberfläche

Beim Aufruf des Moduls erhältst Du einen Überblick über bereits angelegte Export-Feeds. Zusätzlich befinden sich hier Grundfunktionen wie:

  • Feed hinzufügen: Um einen neuen Export-Feed zu erstellen
  • Feed editieren: Über diese Funktion kann ein angelegter Export-Feed bearbeitet werden.
  • Feed löschen: Hiermit wird der gewählte Export-Feed gelöscht.
  • Feed duplizieren: Durch Klicken auf das Feed duplizieren-Icon öffnet sich ein neuer Export-Feed mit den exakt gleichen Daten des Quell-Feeds, der nach dem Speichern aber als neuer Feed angelegt wird.
  • Export Starten: Führt den im Feed konfigurierten Export aus

Feed-URL kopieren

An die Feed-URL kommst Du über 2 Wege:

  • Aufruf über Shopware: Klicke mit der rechten Maustaste auf den Link in der Übersicht und wähle "Link-Adresse kopieren"
  • Aufruf über das Dateisystem (Caching und ein erfolgter Export vorausgesetzt!): Öffne den Feed und merke dir den Hash (Zugriffsschlüssel) und den Dateinamen, danach schaue nach im Dateisystem unter /var/cache/production_REVISION/productexport/. Hier wird die Datei als "HASH_FILENAME" abgelegt, also zum Beispiel 4ebfa063359a73c356913df45b3fbe7f_export.txt

Export-Feeds

Hier erklären wir Dir, wie Du Export-Feeds anlegen und individualisieren kannst.

Die Individualisierung benötigt unter Umständen Programmierkenntnisse. Falls Du diese nicht hast, oder Zweifel hast, ob Deine Kenntnisse ausreichen, solltest Du hier nicht eingreifen, da Du Dir mit den Änderungen Deinen Export-Feed kaputt machen kannst.

Grundeinstellungen für alle Feeds

  • Titel: Name des Exports (relevant für die Bezeichnung in der Produktexport-Übersicht).
  • Dateiname: Teil der Bezeichnung der zu erstellenden Datei auf dem Server.
  • Partner ID: Die Partner ID wird an den jeweiligen Artikellink zum Shop angehängt. Somit entsteht beim Kauf des Artikels die Zuordnung zu einem Partner aus dem Partnerprogramm. Dieses wird ebenfalls in den Statistiken berücksichtigt und macht Verkäufe transparenter.
  • Zugriffsschlüssel: Der Zugriffsschlüssel wird beim Anlegen eines neuen Produkt-Exports automatisch generiert. Dieser Schlüssel ist Bestandteil des Dateinamens der anzulegenden Datei auf dem Server und wird in die URL zur XML/CSV Datei eingebunden. Durch Ändern dieses Zugriffsschlüssels kann das Preisportal nicht mehr auf die Datei zugreifen.
  • Aktiv: Zum De-/Aktivieren des Exports
  • Cache-Zeit / Methode: Diese Einstellung definiert, ob der Export-Feed immer neu erzeugt, über bestimmte Zeit gecacht oder ausschließlich über Cronjobs erzeugt wird. Cronjobs empfehlen sich besonders in Szenarien, in denen der Feed sehr groß ist, die Serverlast kann dann besser verteilt werden. Beachte, dass das Speichern des Feeds im Backend den Cache invalidiert und die Datei danach erst wieder neu erzeugt werden muss! Erst nach der ersten Erzeugung greifen die definierten Caching-Einstellungen wieder!
    • Wenn Du ausschließlich über Cron arbeiten willst, so muss das Plugin 'Cron' sowie 'CronProductExport' installiert und aktiv sein, da die Feeds sonst nicht erzeugt werden. Beachte, dass sowohl der Cron-User als auch der User des Webservers Lese- und Schreibberechtigungen zum Ordner /var/cache/production_REVISION/productexport brauchen!
  • Letzter Export: Zeigt an, wann der Feed das letzte mal erzeugt wurde.
  • Shop: Definiert, für welchen Shop der Feed gelten soll, entsprechend werden auch nur Artikel aus diesem Shop exportiert.
  • Kundengruppe: Definiert diejenige Kundengruppe, aus der die Preise entnommen werden (Im Standard: Shopkunden)
  • Währung: Definiert die Währung, in der die Preise im Feed ausgegeben werden. Beachte, dass die Währung die Preise auch direkt umrechnet!
  • Kategorie: Hiermit ist ein Export für eine bestimmte Kategorie möglich. Bei Subshops wird hier für einen gesamten Export die Hauptkategorie des jeweiligen Shops ausgewählt.
  • Varianten exportieren: Wahlweise können Variantenartikel vom Export ausgeschlossen werden. In diesem Fall wird immer nur die Vorauswahl mit den zugehörigen Daten exportiert.
  • Letzte Cache Aktualisierung: Zeigt an, wann der Cache das letzte mal aktualisiert wurde.

Detaillierte Einstellungen:

Formatierung

  • Zeichenkodierung: standardmäßig ISO-8859-1 für CSV/TSV / UTF-8 für XML-Exporte
  • Dateiformat: Einstellen des akzeptierten Formats (CSV/XML/TXT)

Kopfzeile

Hier werden bei einer CSV-Datei die Spaltenbezeichnungen definiert, z.B.: id, hersteller, modell_nr, name, kategorie, preis etc. Bei einer XML-Datei befindet sich hier ebenfalls der gesamte Kopf der Datei, sowie der Start-Tag, title, description etc.

Template

Hier wird das Template für die zu exportierenden Artikel definiert. Das Template wird via Schleife auf jeden Artikel angewendet. Bei CSV/TXT-Exporten ergibt dies jeweils eine Zeile pro Artikel. Bei einem XML-Export z.B. Google, ist jeder Artikel durch einen Start- und End-Tag eingefasst. So ist es möglich die Exporte, ja nach Struktur und Anforderung anzupassen. Beachte,dass die Generierung massiv verlangsamt wird, je mehr Berechnungen im Feed ausgeführt werden!

Liste der verfügbaren Variablen

KonfigurationsvariablenBeschreibung
{$sConfig.sBASEPATH}URL zum Shop
{$sConfig.sSHOPNAME}Name des Shops
ExporteinstellungenBeschreibung
{$sSettings.feedID}Eindeutige ID des Produktexportes
{$sSettings.name}Produktexport-Bezeichnung
{$sSettings.last_export}Datum der letzten Ausführung
{$sSettings.hash}Zugriffs-Hash
{$sSettings.count_articles}Artikelanzahl der letzten Ausführung
{$sSettings.formatID}DateiformatID
{$sSettings.filename}Dateiname
{$sSettings.encodingID}ZeichenkodierungsID
{$sSettings.categoryID}Hauptkategorie
{$sSettings.currencyID}WährungsID
{$sSettings.customergroupID}KundengruppenID
{$sSettings.partnerID}PartnerID
{$sSettings.languageID}SprachID
{$sSettings.multishopID}ShopID
{$sSettings.variant_export}Varianten exportieren
{$sSettings.encoding}Zeichenkodierung
Filter-EinstellungenBeschreibung
{$sSettings.active_filter}Nur aktive Artikel
{$sSettings.image_filter}Nur Artikel mit Bildern
{$sSettings.stockmin_filter}Bestand kleiner Mindestbestand
{$sSettings.instock_filter}Bestand kleiner
{$sSettings.price_filter}Preis kleiner
{$sSettings.own_filter}Eigener Filter
{$sSettings.count_filter}Maximale Artikel Anzahl
{$sSettings.header}Kopfzeile eigener Filter
{$sSettings.footer}Fußzeile
{#F#}Feldmarkierung
{#EF#}Escaped-Feldmarkierung
{#S#}Trennzeichen
{#ES#}Escaped-Trennzeichen
{#L#}Zeilentrennzeichen
{#EL#}Escaped-Zeilentrennzeichen

Folgende Variablen stehen nur im Body zur Verfügung:

Artikelvariablen

KonfigurationsvariablenBeschreibung
{$sArticle.articleID}ArtikelID
{$sArticle.name}Artikel-Bezeichnung
{$sArticle.articleID|link:$sArticle.name|escape}Artikel-URL
{$sArticle.description}Kurzbeschreibung
{$sArticle.description_long}Beschreibung
{$sArticle.shippingtime}Lieferzeit (In Tagen)
{$sArticle.added}Artikel hinzugefügt
{$sArticle.shippingfree}Versandkostenfrei
{$sArticle.releasedate}Erscheinungsdatum
{$sArticle.topseller}Artikel hervorheben
{$sArticle.keywords}Keywords
{$sArticle.minpurchase}Mindestabnahme
{$sArticle.purchasesteps}Staffelung
{$sArticle.maxpurchase}Maximalabnahme
{$sArticle.purchaseunit}Preis bezieht sich auf
{$sArticle.referenceunit}Referenzeinheit
{$sArticle.taxID}SteuerID
{$sArticle.supplierID}Hersteller ID
{$sArticle.unitID}EinheitID
{$sArticle.unit_description}Maßeinheit
{$sArticle.changed}Datum der letzten Änderung
{$sArticle.active}Artikel aktiv
{$sArticle.variantActive}Variante aktiv
{$sArticle.articledetailsID}Artikeldetails ID
{$sArticle.ordernumber}Artikelnummer
{$sArticle.suppliernumber}Herstellernummer
{$sArticle.standard}Default-Variante
{$sArticle.additionaltext}Variantentext
{$sArticle.impressions}Seitenaufrufe
{$sArticle.sales}Verkäufe
{$sArticle.instock}Bestand
{$sArticle.stockmin}Mindestbestand 
{$sArticle.laststock}Abverkaufsartikel
{$sArticle.esd}Downloadartikel
{$sArticle.weight}Gewicht
{$sArticle.ean}EAN
{$sArticle.position}Position
{$sArticle.attr1} bis {$sArticle.attr20}Attribute
{$sArticle.supplier}Hersteller
{$sArticle.unit}Einheit
{$sArticle.tax}Steuer
{$sArticle.image}Artikelbild
{$sArticle.netprice}Netto-Preis
{$sArticle.price}Brutto-Preis
{$sArticle.netprice_numeric}Netto-Preis wie im Frontend gerundet
{$sArticle.price_numeric}Brutto-Preis wie im Frontend gerundet
{$sArticle.purchaseprice}Einkaufspreis
{$sArticle.netpseudoprice}Netto-Pseudopreis
{$sArticle.pseudoprice}Brutto-Pseudopreis
{$sArticle.baseprice}Einkaufspreis
{$sArticle.discount}Preisgruppen-Rabatt
{$sArticle.sVoteCount}Produktbewertung Anzahl
{$sArticle.sVoteAverage}Produktbewertung Durchschnitt
{$sArticle.metaTitle}Meta Titel
{$sArticle.pseudosales}Pseudo-Verkäufe
{$sArticle.notification}E-Mail-Benachrichtigung aktiv?
{$sArticle.pricegroupActive}Preisgruppe aktiv?
{$sArticle.pricegroupID}ID der ausgewählten Preisgruppe
{$sArticle.available_from}Verfügbar von
{$sArticle.available_to}Verfügbar bis
{$sArticle.articleID|category:" > "|escape}Ausgabe der Kategorien
  • mit {$sArticle.image|image:4} oder {$sArticle.image|image:5} usw. können die entsprechenden Thumbnailgrößen ausgegeben werden.

Ergänzungen zu den Variablen

BefehlBeschreibung
strip_tagsHerausfiltern von html-Code
stripEntfernt doppelte Leerzeichen und ersetzt Zeilenumbrüche durch Leerzeichen.
trimEntfernt hinter und vor dem Text überflüssige Leerzeichen
truncate:500Der Text wird auf 500 Zeichen begrenzt
html_entity_decodeUmwandlung der Umlaute
escapeUmwandlung Sonderzeichen in html, z.B. & = &
escape:xmlEncoding nur für xml-Exporte
@shippingcostBerechnet die Versandkosten zum jeweiligen Artikel
format:"number"formatiert eine Zahl entsprechend der gewählten Lokalisierung/Sprache

Fußzeile

Die Fußzeile wird ausschließlich für die XML-Exporte benötigt. In diesem Feld stehen die End-Tags die in der Kopfzeile geöffnet werden. Für Google sähe die Fußzeile wie folgt aus:


</channel>
</rss>

Geblockte Kategorien

Hier kannst Du Kategorien vom Export ausschließen.

Auch wenn Artikel mehreren Kategorien zugewiesen sind: Sobald die Zuweisung zu mindestens einer blockierten Kategorie besteht, wird dieser Artikel nicht exportiert!

Hersteller Filter

Im linken Feld befinden sich alle Hersteller Deines Shops. Um Artikel eines bestimmten Herstellers vom Export auszuschließen, kann dieser per Doppelklick oder per Markierung und Klick auf den jeweiligen Pfeil in der Mitte zur Liste der ausgeschlossenen Hersteller hinzugefügt werden.

Artikel Filter

Ähnlich zum Hersteller-Filter findest Du auch hier auf der linken Seite alle Deine Artikel. Diese kannst Du entweder per Drag'n'Drop oder durch Markieren und Klick auf den jeweiligen Pfeil in der Mitte, zur Liste der vom Export ausgeschlossenen Artikel, auf der rechten Seite, hinzufügen.

Weitere Filter

  • Preis größer: z.B. 1000 - Export von Artikeln mit Verkaufspreis >= 1000
  • Bestand größer: z.B. 10 - Export von Artikeln mit Lagerbestand >= 10
  • Maximale Artikel Anzahl: Limitiert die Ausgabe der Artikel im Export-File auf diesen Wert.
  • Bestand kleiner Mindestbestand: Artikel mit einem Lagerbestand, der unter dem Mindestbestand liegt, werden vom Export ausgeschlossen.
  • Nur aktive Artikel: Wenn angehakt, werden nur die aktiven Artikel des Shops exportiert.
  • Eigene Filter: Dieses Feld setzt MySQL-Kenntnisse voraus. Hier sind z.B. folgende Einträge möglich:
    • at.attr6="true" - Attribut 6 ist gesetzt
    • a.topseller="true" - Exportiert nur Artikel, die im Shop hervorgehoben werden
    • d.releasedate>=CURDATE() OR d.releasedate= 0000-00-00 - Artikel ist bereits erschienen
    • SELECT 1 FROM s_articles_categories WHERE articleID=a.id AND categoryID=42 - Alle Artikel aus der Category-ID 42
    • d.ean!="" - Exportiert nur Artikel mit einer EAN
    • a.id in (select articleid FROM s_articles_details group by articleid having count(id)>=50000 and count(id)<=100000) - Versatz Artikel im Feed vom 50.000sten Eintrag bis zum 100.000sten
    • DAYOFWEEK(NOW()) not in (2, 5) - Wochentage außer Dienstag und Donnerstag
    • (time(now()) > '10:00:00' and time(now()) < '12:00:00' ) or (time(now()) > '17:00:00' and time(now()) < '22:00:00' ) - Uhrzeit zwischen 10:00 und 12:00 oder 17:00 und 22:00 Uhr
  • Nur Artikel mit Bildern: Wenn aktiv, werden nur Artikel exportiert, die Bilder enthalten.

Freitextfelder

Hier kannst Du Freitextfelder für Deinen Export-Feed definieren. Wenn Du mit Freitextfeldern arbeiten möchtest, lies Dir parallel dazu den folgenden Artikel durch: Freitextfeld-Verwaltung

Tipps & Tricks

Grundpreisberechnung / Grundpreisangabe

Mit folgender Ergänzung kann der Inhalt, sowie der Grundpreis des Artikels im Produktexport aufgeführt werden:

Kopfzeile:


Grundpreis{#S#}
Inhalt{#S#}

Template:


{if $sArticle.referenceunit && $sArticle.purchaseunit}
{assign var="sArticleReferenceprice" value=$sArticle.price/$sArticle.purchaseunit*$sArticle.referenceunit}
{$sArticle.referenceunit} {$sArticle.unit} = {$sArticleReferenceprice|escape:"number"}{#S#}
{$sArticle.purchaseunit} {$sArticle.unit}{#S#}
{else}
{#S#}{#S#}
{/if}
 

Ausgabe Additionaltext

Du kannst Dir auch die verschiedenen Variationen eines Konfigurator Artikel ausgegeben lassen. Damit die Variablen zur Verfügung stehen, muss die oben beschriebene Grundeinstellung Varianten exportieren auf Ja stehen.

So können die Konfigurator Variablen im Produktexport verwendet werden.

KonfigurationsvariablenAusgabe
{$sArticle.additionaltext}blau XL

Wenn Du Konfigurator-Artikel und Varianten exportierst, ist es sinnvoll, den Titel des Templates zu erweitern. Damit nicht mehrmals der gleiche Artikelname ausgegeben wird, empfehlen wir, dass Du die Variable {$sArticle.additionaltext} hinter dem Titel im Template hinterlegst. So kannst Du die Ausgabe Nova Jacket blau / XL mit folgendem Templatetext realisieren:


{$sArticle.name|strip_tags|strip|truncate:80:"...":true|escape|htmlentities} {$sArticle.additionaltext|escape}{#S#}

Eigenschaften

Um Artikeleigenschaften im Feed zu übergeben, muss zuerst an gewünschter Stelle in der Kopfzeile eine neue Spalte eingefügt werden. Die Bezeichnung ist für die Funktion irrelevant.

Das Template muss dann an passender Stelle um folgenden Code erweitert werden:


{assign var="properties" value=$sArticle.articleID|property:$sArticle.filtergroupID}
{foreach from=$properties item=property}
    {if $property}
        {$property.groupName|escape}: {$property.name|escape}: {$property.value|escape}
    {/if}
{/foreach}

Im Feed werden dann alle dem Artikel zugewiesenen Eigenschaften ausgegeben.

Variantenbilder / weitere Artikelbilder

Um Variantenbilder auszugeben, kannst Du den Template-Code des Bildes im bestehenden Feed durch folgenden ersetzen:


{$sArticle.articleID|articleImages:$sArticle.ordernumber:2:">"|escape}

Dieser Code zeigt im Feed zuerst die der Variante zugewiesenen Bilder in der zugewiesenen Thumbnailgröße (hier: 2) an und nachfolgend alle dem Artikel allgemein zugewiesenen Bilder. Welche Thumbnailgröße zur Verfügung steht, erfährst Du im Medienmanager im Punkt Thumbnails.

Möchtest Du zum Beispiel nur das erste zugewiesene Bild ausgeben, kannst Du wie folgt vorgehen: In das Template muss ganz am Anfang (vor den Strip) folgender Code platziert werden:


{assign var="string" value=$sArticle.articleID|articleImages:$sArticle.ordernumber:2:"##"|escape}
{assign var="productVariantImage" value="##"|explode:$string}

Dieser Code holt sich die Artikelbilder und setzt diese in einen String, den wir später wieder bearbeiten können.

Im eigentlichen Bildabschnitt muss dann folgender Code verwendet werden:


{$productVariantImage[0]}

Die 0 gibt hierbei die Bildnummer an, wobei 0 hier immer das erste Bild ist.

Einzelne Varianten können auch direkt aufgerufen werden. Hierzu muss der Parameter ?number="Artikelnummer der Variante" an die URL des Artikels gehängt werden.

  • Beispiel für den Produktexport ohne Partner ID:

{$sArticle.articleID|link:$sArticle.name}{if $sArticle.additionaltext}?number={$sArticle.ordernumber}{/if}
  • Beispiel für den Produktexport mit Partner ID:

 {$sArticle.articleID|link:$sArticle.name}{if $sArticle.additionaltext}?number={$sArticle.ordernumber}&PARTNER-TAG{/if}?PARTNER-TAG

Preisaufschlag im Export

Da das Template auf Smarty basiert, können hier alle bisher bekannten Kniffe aus Smarty angewandt werden, auch um die Preise zu ändern:

Manche Preissuchmaschinen vergleichen Deinen Artikelpreis im Feed mit dem auf der Detailseite und geben Dir Fehler aus, wenn diese nicht übereinstimmen.

Prozentualer Aufschlag

Im folgenden Beispiel wird ein Aufschlag von 5% auf den Artikelpreis errechnet:


// Vorher:
{$sArticle.price|escape:"number"}{#S#}

// Nachher:
{$sArticle.price*1.05|escape:"number"}{#S#}

Pauschaler Aufschlag

Hier wird ein pauschaler Aufschlag von 0,50 Einheiten einer entsprechenden Währung addiert:


// Vorher:
{$sArticle.price|escape:"number"}{#S#}

// Nachher:
{$sArticle.price+0.50|escape:"number"}{#S#}

Warum werden nicht alle Artikel exportiert?

Dass Artikel nicht im Feed landen, kann mehrere Ursachen haben. Kontrolliere daher die folgenden Einstellungen:

  • Prüfe, ob Du ein Limit für den Export definiert hast
  • Prüfe die Filtereinstellungen
  • Prüfe, ob der Server den Export stemmt. Falls Du sehr viele Artikel exportierst, kann es passieren, dass der Server in das sogenannte "memory_limit" läuft. Falls das der Fall ist, wende Dich an Deinen Hoster, da diese Einstellung vom Server vorgegeben wird und nichts mit Shopware zu tun hat.

Wenn Du Kategorien vom Export ausschließt, schließt Du automatisch auch alle darin enthaltenen Artikel aus. Beispiel: Dein Artikel ist in Kategorie A und B enthalten. Wenn Du nun Kategorie B sperrst, wird der Artikel ebenfalls ausgeschlossen, auch wenn er noch in Kategorie A vorhanden ist.

Konfiguratoroptionen in eigenen Spalten

Du kannst Konfiguratorgruppen in eigenen Spalten ausgeben, statt den Additionaltext als Ganzes auszugeben. So stellst Du sicher, dass die Beschreibung für die Preissuchmaschine passgenauer ist.

XML Dynamisch

Dynamisch funktioniert nur, wenn es keine Konfigurationsgruppen / -optionen gibt, die mit Leerzeichen getrennt sind!

Der folgende Code muss ins Template eingefügt werden:


{foreach $sArticle.configurator_options as $option}
  <{$option@key}>{$option}</{$option@key}>
{/foreach}

XML Statisch

Der folgende Code muss ins Template eingefügt werden:


<farbe>{$sArticle.configurator_options['Farbe']}</farbe>
<groesse>{$sArticle.configurator_options['Größe']}</groesse>

"Farbe" und "Größe" stehen hier exemplarisch als Beispiel und müssen gegen die eigenen Gruppennamen getauscht werden.

CSV Statisch

Füge zuerst den Namen der Konfiguratoroption in die Kopfzeile an der gewünschten Position ein:


farbe{#S#}
groesse{#S#}

Der folgende Code muss dann an entsprechender Position ins Template eingefügt werden:


{$sArticle.configurator_options['Farbe']}
{$sArticle.configurator_options['Größe']}

"Farbe" und "Größe" stehen hier exemplarisch als Beispiel und müssen gegen die eigenen Gruppennamen getauscht werden.

Aktive und inaktive Varianten

Es ist möglich, den aktiv-Status jeder einzelnen Variante auszugeben. Falls das jeweilige Preisportal diese Angabe unterstützt, kannst Du dies nun nutzen. Um diesen Status auf den Feed anzuwenden, müssen zum Einen die Varianten exportiert werden und zum Anderen muss in der Kopfzeile eine neue Spalte eingefügt werden.

Beispielsweise aktiv{#S#}.

Im Template fügst Du dann an der gleichen Position diese Variable ein: {$sArticles.variantActive}{#S#}

Im Feed wird dann zu jeder Variante der entsprechende Status ausgegeben.

War dieser Artikel hilfreich?