Inhaltsverzeichnis
- Ablauf
- Tipps, Tricks und Hinweise
- Felddefinitionen
- Enthaltene Standardtemplates (Stand 20.3)
- Beispiele
Zur Anpassung von Bestellungen bei Shopschnittstellen (sog. Shopimportern) kannst du die übermittelten Warenkörbe (meist “Shopping Cart” oder “Cart” genannt) vor dem finalen Import in xentral verändern.
Je nach Shop ist die Datenstruktur des Warenkorbes unterschiedlich in Form und Inhalt. Plugins erweitern diese Struktur zusätzlich. Der Importer übernimmt jedoch nur die Daten, die auch interpretiert werden können. Daher müssen zusätzlich übermittelte Daten über Smarty aus dem Warenkorb des Shops in den Auftrag in xentral übernommen werden. Auf die Daten greifst du über das Objekt $cart zu.
Hinweis: Um zu prüfen, welche Daten zur Verfügung stehen, kannst du unter dem Reiter "Schnittstelle" den Filter "Aufträge anzeigen" setzen. So kannst du alle bereits verarbeiteten Aufträge inkl. den empfangenen Daten einsehen.
Den Template-Editor findest du in allen Shop-Schnittstellen unter dem Reiter "Smarty".
Auf der rechten Seite im Bereich "Einstellungen" kannst du folgende Optionen aktivieren:
- Warenkorb transformieren aktiv → Ein- und Ausschalten der Smarty-Transformation für alle Aufträge, die nach der Speicherung eingehen. Bereits verarbeitete Aufträge werden nicht mehr verändert
- Warenkorb ersetzen → Zeigt nur das Ergebnis des Templates an und lässt alle anderen Warenkorbinformationen weg. Dies ist zum Testen sinnvoll oder wenn das Template alle möglichen Optionen berücksichtigt
Ablauf
Beim Import eines Warenkorbes im Shopimporter wird folgende Reihenfolge eingehalten:
Die Auftragsdaten kommen aus dem (1) Shop und werden durch den (2) Shopimporter bearbeitet. Dabei wird eine xentral-interne Warenkorbstruktur erstellt, die anschließend auf Basis der eingegangenen Warenkorbdaten aus dem Shop und den bereits interpretierten Daten des xentral-Warenkorbes mit (3) Smarty bearbeitet werden kann. Zielformat ist dabei eine (4) xentral-interne Warenkorbstruktur.
Der Warenkorb
Der Warenkorb enthält die Auftragsinformationen (auch Header-Informationen) wie z.B. Rechnungs- und Lieferadresse des Empfängers, Datum und Auftragsnummer aus dem Shop, Informationen zu Versandart und gewählter Zahlungsweise, etc. Dabei können sich die Formate und Inhalte von Shop zu Shop unterscheiden.
Aus den Headerdaten werden Verknüpfungen zu bestehenden Daten hergestellt, z.B. wenn die E-Mail-Adresse eines bestehenden Kunden erkannt wurde, wird der Auftrag demselben Kunden zugewiesen. Andernfalls wird eine neue Adresse für den Kunden angelegt. Je nach Setting können auch Stammdaten überschrieben und damit aktualisiert werden.
Hinweis: Die Speicherung von Stammdaten geschieht bereits vor der Verarbeitung durch die Smarty Template Engine. Daher werden Veränderungen an Adressdaten bei der Speicherung / Aktualisierung der Adressdaten nicht berücksichtigt!
Tipps, Tricks und Hinweise
Hier findest du einige Tipps, Tricks und Hinweise, die dir eventuell weiterhelfen können.
Löschen von Warenkorbinhalten
Unerwünschte Werte im Warenkorb kannst du durch das Überschreiben mit leeren Knoten löschen. Bitte beachte: Diese Funktion sollte stets vorab getestet werden, da z.B. die Speicherung von Stammdaten bereits vor der Verarbeitung mit Smarty vorgenommen werden können.
Hinweis: Auch beim Verwenden einer foreach-Schleife können Inhalte von XML-Knoten mit dem letzten Wert der Ausgabe überschrieben werden. Bitte beachte, dass der jeweils letzte Eintrag eines Knotens der einzig verbleibende ist.
Anpassung von Auftragsinhalten
Zur Anpassung von Auftragseigenschaften kannst du auch folgende Werte manipulieren:
- Versandart: <lieferung>Versandart</lieferung>
- Projekt: <projekt>Projekt ID</projekt>
SQL im Smarty des Shopimporters
Bei der Verwendung von Smarty in der Shopschnittstelle kannst du nur Daten aus dem Warenkorb verwenden. SQL-Abfragen sind hier nicht möglich.
Einfluss von Hooks
Sollten sich Hooks auf die Anlage von Aufträgen auswirken, werden diese ggf. nach der Verarbeitung des Templates angewendet.
Warenkorbstruktur
Ausgabe in “Aufträge anzeigen”: Vorangestellt ist die XML-Struktur des Warenkorbeingangs, die aus dem Shop übergeben wird (ohne Smarty). Im Anschluss das durch ein Template veränderter Warenkorb als Ergebnis.
Ansprechen von Arrays mit numerischen Indizes
Array mit numerischen Indizes: [0] wird mit ->item0 angesprochen. Array-Inhalte können aber in unterschiedlicher Reihenfolge aus dem Shop übermittelt werden, daher ist es immer sicherer, den Wert über eine Schleife mit Prüfung des Indexes zu ermitteln.
Weitere Hinweise
Weitere Hinweise und Funktionen wie z.B. zum Escaping mit CDATA findest du unter Einführung Smarty.
Felddefinitionen
Eine vollständige Auflistung der verfügbaren Felder inkl. einer Übersetzung der Feldnamen und einer Beschreibung der Inhalte in Englisch sind jeweils unterhalb des Screenshots verlinkt.
Header Daten
Weitere Felddefinitionen findest du hier.
Artikelliste
Weitere Felddefinitionen findest du hier.
Enthaltene Standardtemplates (Stand 20.3)
Im Folgenden findest du die Standardtemplates für den jeweiligen Shop.
Shopify
Im nachfolgenden Codeausschnitt findest du das Standardtemplate für Shopify.
<?xml version="1.0" encoding="UTF-8"?><xml>
{*START PREPARING*}
{assign var=orderData value=$cart->orderData}
{assign var=transactionNumber1 value=$orderData->token}
{assign var=transactionNumber2 value=$orderData->transactions->token}
{assign var=timeStamp value=$orderData->created_at|truncate:20:" "}
{*PREPARE BILLING ADDRESS*}
{assign var=billingAddressFirstName value=$orderData->billing_address->first_name}
{assign var=billingAddressLastName value=$orderData->billing_address->last_name}
{assign var=billingAddressName value="$billingAddressFirstName $billingAddressLastName"}
{assign var=billingAddress1 value=$orderData->billing_address->address1}
{assign var=billingAddress2 value=$orderData->billing_address->address2}
{if $billingAddress2}
{assign var=billingAddress value="$billingAddress1 $billingAddress2"}
{else}
{assign var=billingAddress value="$billingAddress1"}
{/if}
{*PREPARE SHIPPING ADDRESS*}
{assign var=shippingAddressFirstName value=$orderData->shipping_address->first_name}
{assign var=shippingAddressLastName value=$orderData->shipping_address->last_name}
{assign var=shippingAddressName value="$shippingAddressFirstName $shippingAddressLastName"}
{assign var=shippingAddress1 value=$orderData->shipping_address->address1}
{assign var=shippingAddress2 value=$orderData->shipping_address->address2}
{if $shippingAddress2 != ""}
{assign var=shippingAddress value="$shippingAddress1 $shippingAddress2"}
{else}
{assign var=shippingAddress value="$shippingAddress1"}
{/if}
{*END PREPARING*}
{*START FILLING THE CART*}
<auftrag><![CDATA[{$orderData->id}]]></auftrag>
<onlinebestellnummer><![CDATA[{$orderData->order_number}]]></onlinebestellnummer>
{if $transactionNumber2 != ""}
<transaktionsnummer><![CDATA[{$transactionNumber2}]]></transaktionsnummer>
{else}
<transaktionsnummer><![CDATA[{$transactionNumber1}]]></transaktionsnummer>
{/if}
<gesamtsumme><![CDATA[{$orderData->total_price}]]></gesamtsumme>
<zahlungsweise><![CDATA[{$orderData->gateway}]]></zahlungsweise>
<waehrung><![CDATA[{$orderData->currency}]]></waehrung>
<bestelldatum><![CDATA[{$timeStamp|truncate:10:""}]]></bestelldatum>
<zeitstempel><![CDATA[{$timeStamp|replace:"T":" "}]]></zeitstempel>
{foreach key=key item=item from=$orderData->shipping_lines}
<versandkostenbrutto><![CDATA[{$item->price}]]></versandkostenbrutto>
{/foreach}
{foreach key=noteKey item=note from=$orderData->note_attributes}
{if $note->name == "vat_id"}
<ustid>$note->value}]]></ustid>
{/if}
{/foreach}
{if $orderData->taxes_included == 1}
<rabattbrutto><![CDATA[{$orderData->total_discounts}]]></rabattbrutto>
{else}
<rabattnetto><![CDATA[{$orderData->total_discounts}]]></rabattnetto>
{/if}
{*ADDRESS LOGIC*}
<anrede>herr</anrede>
{if $orderData->billing_address->company != ""}
<anrede>firma</anrede>
<name><![CDATA[{$orderData->billing_address->company}]]></name>
<ansprechpartner><![CDATA[{$billingAddressName}]]></ansprechpartner>
{else}
<name><![CDATA[{$billingAddressName}]]></name>
{/if}
<strasse><![CDATA[{$billingAddress}]]></strasse>
<plz><![CDATA[{$orderData->billing_address->zip}]]></plz>
<ort><![CDATA[{$orderData->billing_address->city}]]></ort>
<land><![CDATA[{$orderData->billing_address->country_code}]]></land>
<email><![CDATA[{$orderData->contact_email}]]></email>
<telefon><![CDATA[{$orderData->billing_address->phone}]]></telefon>
{if $billingAddressName != $shippingAddressName || $billingAddress != $shippingAddress}
<abweichendelieferadresse>1</abweichendelieferadresse>
{if $orderData->shipping_address->company != ""}
<lieferadresse_name><![CDATA[{$orderData->shipping_address->company}]]></lieferadresse_name>
<lieferadresse_ansprechpartner><![CDATA[{$shippingAddressName}]]></lieferadresse_ansprechpartner>
{else}
<lieferadresse_name><![CDATA[{$shippingAddressName}]]></lieferadresse_name>
{/if}
<lieferadresse_strasse><![CDATA[{$shippingAddress}]]></lieferadresse_strasse>
<lieferadresse_plz><![CDATA[{$orderData->shipping_address->zip}]]></lieferadresse_plz>
<lieferadresse_ort><![CDATA[{$orderData->shipping_address->city}]]></lieferadresse_ort>
<lieferadresse_land><![CDATA[{$orderData->shipping_address->country_code}]]></lieferadresse_land>
<telefon><![CDATA[{$orderData->shipping_address->phone}]]></telefon>
{/if}
{*ITEM LOGIC*}
<articlelist>
{foreach key=lineItemKey item=lineItem from=$orderData->line_items}
<{$lineItemKey}>
<articleid><![CDATA[{$lineItem->sku}]]></articleid>
<fremdnummer><![CDATA[{$lineItem->variant_id}]]></fremdnummer>
<name><![CDATA[{$lineItem->name}]]></name>
<quantity><![CDATA[{$lineItem->quantity}]]></quantity>
<price><![CDATA[{$lineItem->price}]]></price>
{foreach key=taxKey item=taxItem from=$lineItem->tax_lines}
<steuersatz><![CDATA[{$taxItem->rate * 100}]]></steuersatz>
{/foreach}
</{$lineItemKey}>
{/foreach}
</articlelist>
</xml>
Shopware 5
Im nachfolgenden Codeausschnitt findest du das Standardtemplate für Shopware 5.
<?xml version="1.0" encoding="UTF-8"?><xml>
{*START PREPARING*}
{assign var=orderData value=$cart->order}
{*END PREPARING*}
{*START FILLING THE CART*}
<auftrag><![CDATA[{$orderData->id}]]></auftrag>
<subshop><![CDATA[{$orderData->shopId}]]></subshop>
<onlinebestellnummer><![CDATA[{$orderData->number}]]></onlinebestellnummer>
<gesamtsumme><![CDATA[{$orderData->invoiceAmount}]]></gesamtsumme>
<zahlungsweise><![CDATA[{$orderData->payment->name}]]></zahlungsweise>
<bestelldatum><![CDATA[{$orderData->orderTime|truncate:10:""}]]></bestelldatum>
<versandkostenbrutto><![CDATA[{$orderData->invoiceShipping}]]></versandkostenbrutto>
<email><![CDATA[{$orderData->customer->email}]]></email>
<lieferung><![CDATA[{$orderData->dispatch->name}]]></lieferung>
<transaktionsnummer><![CDATA[{$orderData->transactionId}]]></transaktionsnummer>
<waehrung><![CDATA[{$orderData->currency}]]></waehrung>
{*ADDRESS LOGIC*}
<anrede>herr</anrede>
{if $orderData->billing->salutation == 'mrs'}
<anrede>frau</anrede>
{/if}
{if $orderData->billing->company != ""}
<anrede>firma</anrede>
<name><![CDATA[{$orderData->billing->company}]]></name>
<ansprechpartner><![CDATA[{$orderData->billing->firstName} {$orderData->billing->lastName}]]></ansprechpartner>
{else}
<name><![CDATA[{$orderData->billing->firstName} {$orderData->billing->lastName}]]></name>
{/if}
<strasse><![CDATA[{$orderData->billing->street}]]></strasse>
<plz><![CDATA[{$orderData->billing->zipCode}]]></plz>
<ort><![CDATA[{$orderData->billing->city}]]></ort>
<ustid><![CDATA[{$orderData->billing->vatId}]]></ustid>
<land><![CDATA[{$orderData->billing->country->iso}]]></land>
{if $orderData->shipping->firstName != $orderData->billing->firstName || $orderData->shipping->street != $orderData->billing->street || $orderData->shipping->country->iso != $orderData->billing->country->iso}
{if $address->attributes->company != ""}
<lieferadresse_name><![CDATA[{$orderData->shipping->company}]]></lieferadresse_name>
<lieferadresse_ansprechpartner><![CDATA[{$orderData->shipping->firstName} {$orderData->shipping->lastName}]]></lieferadresse_ansprechpartner>
{else}
<lieferadresse_name><![CDATA[{$orderData->shipping->firstName} {$orderData->shipping->lastName}]]></lieferadresse_name>
{/if}
<lieferadresse_strasse><![CDATA[{$orderData->shipping->street}]]></lieferadresse_strasse>
<lieferadresse_plz><![CDATA[{$orderData->shipping->zipCode}]]></lieferadresse_plz>
<lieferadresse_ort><![CDATA[{$orderData->shipping->city}]]></lieferadresse_ort>
<lieferadresse_ustid><![CDATA[{$orderData->shipping->vatId}]]></lieferadresse_ustid>
<lieferadresse_land><![CDATA[{$orderData->shipping->country->iso}]]></lieferadresse_land>
{/if}
{*ITEM LOGIC*}
<articlelist>
{foreach key=lineItemKey item=detail from=$orderData->details}
<{$lineItemKey}>
<articleid><![CDATA[{$detail->articleNumber}]]></articleid>
<name><![CDATA[{$detail->articleName}]]></name>
<quantity><![CDATA[{$detail->quantity}]]></quantity>
<price><![CDATA[{$detail->price}]]></price>
<steuersatz><![CDATA[{$detail->taxRate}]]></steuersatz>
</{$lineItemKey}>
{/foreach}
</articlelist>
</xml>
Shopware 6
Im nachfolgenden Codeausschnitt findest du das Standardtemplate für Shopware 6.
<?xml version="1.0" encoding="UTF-8"?><xml>
{*START PREPARING*}
{assign var=orderData value=$cart->order}
{*PREPARE ADDRESS*}
{assign var=billingAddressId value=$orderData->attributes->billingAddressId}
{*END PREPARING*}
{*START FILLING THE CART*}
<auftrag><![CDATA[{$orderData->id}]]></auftrag>
<onlinebestellnummer><![CDATA[{$orderData->attributes->orderNumber}]]></onlinebestellnummer>
<gesamtsumme><![CDATA[{$orderData->attributes->amountTotal}]]></gesamtsumme>
<zahlungsweise><![CDATA[{$orderData->paymentMethod->data->attributes->name}]]></zahlungsweise>
<bestelldatum><![CDATA[{$orderData->attributes->orderDate|truncate:10:""}]]></bestelldatum>
<versandkostenbrutto><![CDATA[{$orderData->attributes->shippingTotal}]]></versandkostenbrutto>
{foreach key=customerKey item=customer from=$orderData->customer->data}
<email><![CDATA[{$customer->attributes->email}]]></email>
{/foreach}
<lieferung></lieferung>
{foreach key=shippingKey item=shipping from=$orderData->shippingMethod->data}
<lieferung><![CDATA[{$shipping->attributes->name}]]></lieferung>
{/foreach}
<transaktionsnummer></transaktionsnummer>
{foreach key=addressKey item=address from=$orderData->transactions->data}
<transaktionsnummer><![CDATA[{$orderData->transactionId}]]></transaktionsnummer>
{/foreach}
{*ADDRESS LOGIC*}
<anrede>herr</anrede>
{foreach key=salutationKey item=salutation from=$orderData->addresses->included}
{if $salutation->type == "salutation"}
{if $salutation->attributes->salutationKey != 'mr'}
<anrede>frau</anrede>
{/if}
{/if}
{/foreach}
{foreach key=addressKey item=address from=$orderData->addresses->data}
{if $address->id == $billingAddressId}
{if $address->attributes->company != ""}
<anrede>firma</anrede>
<name><![CDATA[{$address->attributes->company}]]></name>
<ansprechpartner><![CDATA[{$address->attributes->firstName} {$address->attributes->lastName}]]></ansprechpartner>
{else}
<name><![CDATA[{$address->attributes->firstName} {$address->attributes->lastName}]]></name>
{/if}
<strasse><![CDATA[{$address->attributes->street}]]></strasse>
<plz><![CDATA[{$address->attributes->zipcode}]]></plz>
<ort><![CDATA[{$address->attributes->city}]]></ort>
<ustid><![CDATA[{$address->attributes->vatId}]]></ustid>
{foreach key=countryKey item=country from=$orderData->addresses->included}
{if $country->id == $address->attributes->countryId}
<land><![CDATA[{$country->attributes->iso}]]></land>
{/if}
{/foreach}
{else}
{if $address->attributes->company != ""}
<lieferadresse_name><![CDATA[{$address->attributes->company}]]></lieferadresse_name>
<lieferadresse_ansprechpartner><![CDATA[{$address->attributes->firstName} {$address->attributes->lastName}]]></lieferadresse_ansprechpartner>
{else}
<lieferadresse_name><![CDATA[{$address->attributes->firstName} {$address->attributes->lastName}]]></lieferadresse_name>
{/if}
<lieferadresse_strasse><![CDATA[{$address->attributes->street}]]></lieferadresse_strasse>
<lieferadresse_plz><![CDATA[{$address->attributes->zipcode}]]></lieferadresse_plz>
<lieferadresse_ort><![CDATA[{$address->attributes->city}]]></lieferadresse_ort>
<lieferadresse_ustid><![CDATA[{$address->attributes->vatId}]]></lieferadresse_ustid>
{foreach key=countryKey item=country from=$orderData->addresses->included}
{if $country->id == $address->attributes->countryId}
<lieferadresse_land><![CDATA[{$country->attributes->iso}]]></lieferadresse_land>
{/if}
{/foreach}
{/if}
{/foreach}
{*ITEM LOGIC*}
<articlelist>
{foreach key=lineItemKey item=lineItem from=$orderData->lineItems->data}
<{$lineItemKey}>
<articleid><![CDATA[{$lineItem->attributes->payload->productNumber}]]></articleid>
<name><![CDATA[{$lineItem->attributes->label}]]></name>
<quantity><![CDATA[{$lineItem->attributes->quantity}]]></quantity>
<price><![CDATA[{$lineItem->attributes->price->unitPrice}]]></price>
{foreach key=taxKey item=tax from=$lineItem->attributes->price->calculatedTaxes}
<steuersatz><![CDATA[{$tax->taxRate}]]></steuersatz>
{/foreach}
</{$lineItemKey}>
{/foreach}
</articlelist>
</xml>
Gambio
Im nachfolgenden Codeausschnitt findest du das Standardtemplate für Gambio.
<?xml version="1.0" encoding="UTF-8"?><xml>
{*START PREPARING*}
{assign var=orderData value=$cart->order}
{*END PREPARING*}
{*START FILLING THE CART*}
<auftrag><![CDATA[{$orderData->id}]]></auftrag>
<onlinebestellnummer><![CDATA[{$orderData->id}]]></onlinebestellnummer>
<zahlungsweise><![CDATA[{$orderData->paymentType->module}]]></zahlungsweise>
<bestelldatum><![CDATA[{$orderData->purchaseDate|truncate:10:""}]]></bestelldatum>
<email><![CDATA[{$orderData->customer->email}]]></email>
<lieferung><![CDATA[{$orderData->shippingType->module}]]></lieferung>
<waehrung><![CDATA[{$orderData->currencyCode}]]></waehrung>
{foreach key=detailKey item=detail from=$orderData->totals}
{if $detail->class == "ot_total"}
<gesamtsumme><![CDATA[{$detail->value}]]></gesamtsumme>
{/if}
{if $detail->class == "ot_shipping"}
<versandkostenbrutto><![CDATA[{$detail->value}]]></versandkostenbrutto>
{/if}
{if $detail->class == "ot_discount"}
<rabattbrutto><![CDATA[{$detail->value}]]></rabattbrutto>
{/if}
{/foreach}
<transaktionsnummer><![CDATA[{$orderData->transactionId}]]></transaktionsnummer>
{*ADDRESS LOGIC*}
<anrede>herr</anrede>
{if $orderData->addresses->billing->gender == 'f'}
<anrede>frau</anrede>
{/if}
<name><![CDATA[{$orderData->addresses->billing->firstname} {$orderData->addresses->billing->lastname}]]></name>
{if $orderData->addresses->billing->company != ""}
<anrede>firma</anrede>
<name><![CDATA[{$orderData->addresses->billing->company}]]></name>
<ansprechpartner><![CDATA[{$orderData->addresses->billing->firstname} {$orderData->addresses->billing->lastname}]]></ansprechpartner>
{/if}
<strasse><![CDATA[{$orderData->addresses->billing->street}]]></strasse>
<plz><![CDATA[{$orderData->addresses->billing->postcode}]]></plz>
<ort><![CDATA[{$orderData->addresses->billing->city}]]></ort>
<ustid><![CDATA[{$orderData->customer->vatId}]]></ustid>
<land><![CDATA[{$orderData->country->iso2}]]></land>
{if $orderData->addresses->billing->firstname != $orderData->addresses->delivery->firstname || $orderData->addresses->billing->street != $orderData->addresses->delivery->street || $orderData->addresses->billing->city !=$orderData->addresses->delivery->city}
<lieferadresse_name><![CDATA[{$orderData->addresses->delivery->firstname} {$orderData->addresses->delivery->lastname}]]></lieferadresse_name>
{if $orderData->addresses->delivery->company != ""}
<lieferadresse_name><![CDATA[{$orderData->addresses->delivery->company}]]></lieferadresse_name>
<lieferadresse_ansprechpartner><![CDATA[{$orderData->addresses->delivery->firstname} {$orderData->addresses->delivery->lastname}]]></lieferadresse_ansprechpartner>
{/if}
<lieferadresse_strasse><![CDATA[{$orderData->addresses->delivery->street}]]></lieferadresse_strasse>
<lieferadresse_plz><![CDATA[{$orderData->addresses->delivery->postcode}]]></lieferadresse_plz>
<lieferadresse_ort><![CDATA[{$orderData->addresses->delivery->city}]]></lieferadresse_ort>
<lieferadresse_ustid><![CDATA[{$orderData->addresses->delivery->vatId}]]></lieferadresse_ustid>
<lieferadresse_land><![CDATA[{$orderData->deliveryCountry->iso2}]]></lieferadresse_land>
{/if}
{*ITEM LOGIC*}
<articlelist>
{foreach key=lineItemKey item=detail from=$orderData->items}
<{$lineItemKey}>
<articleid><![CDATA[{$detail->model}]]></articleid>
<name><![CDATA[{$detail->name}]]></name>
<quantity><![CDATA[{$detail->quantity}]]></quantity>
<price><![CDATA[{$detail->price}]]></price>
<steuersatz><![CDATA[{$detail->tax}]]></steuersatz>
</{$lineItemKey}>
{/foreach}
</articlelist>
</xml>
Beispiele
Zum Schluss zeigen wir dir noch ein paar nützliche Beispiele rund um Smarty im Shopimporter.
Muster einer Amazon-Bestellnummer finden
Suche nach einer syntaktisch korrekten Amazon-Bestellnummer in einem String. Mit einer Regular Expression wird das Muster einer Amazon-Bestellnummer in einem String gesucht. Sollte es vorkommen, wird es zum Vergleich mit einer beliebigen Test-Konstante (in diesem Fall “AMZ-FOUND”) verglichen. Die Ausgabe der Nummer erscheint dann mit beliebigem vorangestellten oder nachgelagerten Text oder nur als Nummer.
<?xml version="1.0" encoding="UTF-8"?>
<xml>
{assign var=amznr value="Hallo Welt diese Nummer wird gefunden: 302-9327276-6331545 - hier könnte noch mehr Text stehen"}
{assign var=amznr1 value="Hallo Welt diese Nummer wird NICHT gefunden: 32-9327276-6331545 - egal welcher Text noch folgt"}
{if $amznr|regex_replace:"/^(.*)(\d{ldelim}3{rdelim}-\d{ldelim}7{rdelim}-\d{ldelim}7{rdelim})(.*)$/":"AMZ-FOUND" === "AMZ-FOUND"}
<test>{$amznr|regex_replace:"/^(.*)(\d{ldelim}3{rdelim}-\d{ldelim}7{rdelim}-\d{ldelim}7{rdelim})(.*)$/":"Amazon-Nummer gefunden: \\2"}</test>
{else}
<test>Keine Amazon-Nummer gefunden</test>
{/if}
</xml>
WooCommerce: adress_1 und adress_2 zusammenfassen
Straße und Hausnummer werden nach einem Update des Shop-Importers in der Version 20.2 in zwei Feldern separiert. Bei Bedarf kannst du die Daten mit folgendem Smarty-Template wieder zusammenfassen:
<?xml version="1.0" encoding="UTF-8"?>
<xml>
<order>
<billing>
<address_1>{$cart->order->billing->address_1} {$cart->order->billing->address_2}</address_1>
<address_2></address_2>
</billing>
<shipping>
<address_1>{$cart->order->shipping->address_1} {$cart->order->shipping->address_2}</address_1>
<address_2></address_2>
</shipping>
</order>
</xml>
Weitere Einstellungen: Warenkorb ersetzen darf nicht angehakt sein.
Shopify: phone übernehmen
Telefoninformationen aus billing_address und shipping_adress werden je nach xentral Shopimporter-Version ggf. noch nicht übernommen. In diesem Fall hilft dir der folgende Workaround. Das folgende Smarty-Template ergänzt die Telefonnummer:
<?xml version="1.0" encoding="UTF-8"?>
<xml>
<auftragsdaten>
<phone>{$cart->auftragsdaten->billing_address->phone}</phone>
</auftragsdaten>
</xml>
Weitere Einstellungen: Warenkorb ersetzen darf nicht angehakt sein. Der Übersichtlichkeit halber wurde auf das Wrappen per CDATA verzichtet.
Shopware: Custom-Informationen in Artikelbeschreibung
Bei Verwendung des Plugins Bogx Produkt Konfigurator kannst du die Übernahme von Konfigurationsdaten aus dem Plugin wie Folgt vornehmen:
<?xml version="1.0"?>
<xml>
<articlelist>
{if isset($object->articlelist)}
{foreach key=key item=item from=$object->articlelist}
{if isset($object->order->details) }
{foreach key=keyorder item=orderitem from=$object->order->details }
{if $key = $keyorder}
{if $orderitem->attribute->bogxProductconfigurator}
<{$keyorder}>
<anabregs_text>
{$orderitem->attribute->bogxProductconfigurator|jsondecode assign="json"}{$json->additionaltext|escapeXml}
</anabregs_text>
</{$keyorder}>
{else}
<{$keyorder}>
<anabregs_text></anabregs_text>
</{$keyorder}>
{/if}
{/if}
{/foreach}
{/if}
{/foreach}
{/if}
</articlelist>
</xml>
Der Übersichtlichkeit halber wurde auf das Wrappen per CDATA verzichtet.
Shopify: Custom-Bundle aus Warenkorb-Properties übernehmen
Bei der Verwendung von dynamischen Sets (sog. Custom Bundles) in Shopify werden aus den übermittelten Daten im Warenkorb die dynamischen Anteile durch echte Artikel im Warenkorb ersetzt. So kannst du die folgenden Prozesse in xentral im Standard abarbeiten.
<?xml version="1.0"?>
<xml>
{* DEFINITIONEN --- START *}
{assign var="discountsku" value="<Artikelnummer für Discount-Artikel>"}
{assign var="discountvariantid" value="<VariantID für Discount-Artikel>"}
{* DEFINITIONEN --- ENDE *}
<articlelist>
{if isset($cart->auftragsdaten->line_items)}
{assign var="row" value=0}
{foreach key=key item=item from=$cart->auftragsdaten->line_items}
{assign var="bundlename" value=$item->title}
{assign var="bundlequantity" value=$item->quantity}
{assign var="currentParentInCart" value=$row}
<item{$row}>
<articleid>{$item->sku}</articleid>
<fremdnummer>{$item->variant_id}</fremdnummer>
<name>{$item->title}</name>
<options>{$item->variant_title}</options>
<price>{$item->price}</price>
{foreach key=taxKey item=taxItem from=$item->tax_lines}
<steuersatz>{$taxItem->rate * 100}</steuersatz>
{assign var="bundletax" value=$taxItem->rate * 100}
{/foreach}
<quantity>{$item->quantity}</quantity>
<total_discount>{$item->total_discount}</total_discount>
</item{$row}>
{$row = $row +1}
{if isset($item->properties)}
{foreach key=pKey item=pItem from=$item->properties}
{if $pItem->name == "_is_bundle"}
{assign var="ready" value=false}
{assign var="bundlepos" value=0}
{assign var="bundleitemtitle" value=""}
{assign var="bundleitemsku" value=""}
{assign var="bundleitemprice" value=0}
{assign var="bundleitemdesc" value=""}
{assign var="bundleitemvariantid" value=""}
{/if}
{if $pItem->name|truncate:15:"" == "_product_title_"}
{assign var="bundleitemtitle" value=$pItem->value|truncate:34:"...":true}
{/if}
{if $pItem->name|truncate:13:"" == "_product_sku_"}
{assign var="bundleitemsku" value=$pItem->value}
{/if}
{if $pItem->name|truncate:15:"" == "_product_price_"}
{assign var="bundleitemprice" value=$pItem->value}
{/if}
{if $pItem->name|truncate:14:"" == "_product_desc_"}
{assign var="bundleitemdesc" value=$pItem->value|strip:" "}
{if $bundleitemdesc == "Title: Default Title"}
{assign var="bundleitemdesc" value="Einzelartikel"}
{/if}
{/if}
{if $pItem->name|truncate:19:"" == "_product_variantid_"}
{assign var="bundleitemvariantid" value=$pItem->value}
{assign var="ready" value=true}
{/if}
{if $ready}
{if $bundleitemsku == $discountsku}
<item{$row}>
<parentInCart>{$currentParentInCart}</parentInCart>
<hidePrice>1</hidePrice>
<articleid>{$bundleitemsku}</articleid>
<fremdnummer>{$discountvariantid}</fremdnummer>
<name>{$bundleitemtitle} {$bundlename}: {$bundleitemprice|string_format:"%.2f"|replace:".":","} EUR</name>
<price>0.00</price>
<price_netto />
<steuersatz>{$bundletax}</steuersatz>
<quantity>{$bundlequantity}</quantity>
</item{$row}>
{else}
<item{$row}>
<parentInCart>{$currentParentInCart}</parentInCart>
<hidePrice>1</hidePrice>
<articleid>{$bundleitemsku}</articleid>
<fremdnummer>{$bundleitemvariantid}</fremdnummer>
<name>{$bundleitemtitle}</name>
<options>
<![CDATA[ {$bundleitemdesc|replace:" - ":"\n "}\n Einzelpreis: {$bundleitemprice|string_format:"%.2f"|replace:".":","} EUR]]>
</options>
<price>0.00</price>
<price_netto />
{foreach key=taxKey item=taxItem from=$item->tax_lines}
<steuersatz>{$taxItem->rate * 100}</steuersatz>
{/foreach}
<quantity>{$bundlequantity}</quantity>
</item{$row}>
{/if}
{* Alle Elemente zuruecksetzen fuer neuen Artikel im Set *}
{assign var="ready" value=false}
{assign var="bundlepos" value=0}
{assign var="bundleitemtitle" value=""}
{assign var="bundleitemsku" value=""}
{assign var="bundleitemprice" value=0}
{assign var="bundleitemdesc" value=""}
{assign var="bundleitemvariantid" value=""}
{$row = $row +1}
{/if}
{/foreach} {* laufe durch die properties *}
{/if} {* properties sind da *}
{/foreach}{* auftragsdaten->line_items durchlaufen *}
{/if} {* auftragsdaten->line_items existieren *}
</articlelist>
</xml>
Der Übersichtlichkeit halber wurde auf das Wrappen per CDATA verzichtet. Dieses wird jedoch vor allem bei Artikelbeschreibungen und Namen dringend empfohlen.
Zahlungsweise erweitern bei shopify_payments
Shopify Payments überträgt ggf. keine detaillierte Information über die gewählte Bezahlmethode. Da diese jedoch für die weitere Verarbeitung in xentral essentiell ist, kannst du mit dem folgenden Script die Zahlungsweise in Unterarten mappen und in xentral dann korrekt zuweisen.
{assign var="is_klarna" value=0}
{foreach from=$cart->tansactions->transactions key=keyrow item=el}
{if $el->receipt->payment_method_details->type === "klarna"}
{assign var="is_klarna" value=1}
{/if}
{/foreach}
<zahlungsweise>{if $cart->auftragsdaten->gateway === "shopify_payments" && $is_klarna === 1}klarna{else}{$cart->zahlungsweise}{/if}</zahlungsweise>
WooCommerce Anrede
Je nachdem welches Plugin in WooCommerce verwendet wird, kann es notwendig werden, die Anrede aus verschiedenen Feldern zu ermitteln. In diesem Fall kannst du das folgende Script als Ausgangspunkt für eigene Anpassungen verwenden.
Bitte beachte, dass die Anpassung der Anrede in den Adress-Stammdaten zwar im importierten Auftrag, nicht jedoch in den angelegten Adress-Stammdaten verwendet wird.
<?xml version="1.0" encoding="UTF-8"?><xml>
{assign var=orderData value=$cart->order}
{if $orderData->billing->title == "1"}
<anrede>herr</anrede>
{else}
<anrede>frau</anrede>
{/if}
{if $orderData->billing->company != ""}
<anrede>firma</anrede>
{/if}
</xml>