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.
Beim Aufruf des Moduls erhältst Du einen Überblick über bereits angelegte Export-Feeds. Zusätzlich befinden sich hier Grundfunktionen wie:
An die Feed-URL kommst Du über 2 Wege:
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.
Formatierung
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
Konfigurationsvariablen | Beschreibung |
---|---|
{$sConfig.sBASEPATH} | URL zum Shop |
{$sConfig.sSHOPNAME} | Name des Shops |
Exporteinstellungen | Beschreibung |
---|---|
{$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-Einstellungen | Beschreibung |
---|---|
{$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
Konfigurationsvariablen | Beschreibung | |
---|---|---|
{$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 |
Ergänzungen zu den Variablen
Befehl | Beschreibung |
---|---|
strip_tags | Herausfiltern von html-Code |
strip | Entfernt doppelte Leerzeichen und ersetzt Zeilenumbrüche durch Leerzeichen. |
trim | Entfernt hinter und vor dem Text überflüssige Leerzeichen |
truncate:500 | Der Text wird auf 500 Zeichen begrenzt |
html_entity_decode | Umwandlung der Umlaute |
escape | Umwandlung Sonderzeichen in html, z.B. & = & |
escape:xml | Encoding nur für xml-Exporte |
@shippingcost | Berechnet 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
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
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}
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.
Konfigurationsvariablen | Ausgabe |
---|---|
{$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#}
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.
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.
{$sArticle.articleID|link:$sArticle.name}{if $sArticle.additionaltext}?number={$sArticle.ordernumber}{/if}
{$sArticle.articleID|link:$sArticle.name}{if $sArticle.additionaltext}?number={$sArticle.ordernumber}&PARTNER-TAG{/if}?PARTNER-TAG
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#}
Dass Artikel nicht im Feed landen, kann mehrere Ursachen haben. Kontrolliere daher die folgenden Einstellungen:
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.
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.
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.