Produkt-Vergleich mit Google Shopping .XML

Ja moin,

in meinem Shop habe ich eine „Produkt-Vergleich“-Storefront. Diese läuft mittels Google Shopping .xml Template. Bislang war auch damit immer alles Tutti, bislang hat es einwandfrei genau so funktioniert wir gleich beschrieben. Die Produkte von dort werden z.B. bei Instagram zum Verlinken genutzt.

Nun habe ich heute ein neues Produkt erstellt. So wie ich es immer tu - Produkt erstellen, Informationen füllen (z.B. Preis 4 Euro)… usw. Anschließend erstelle ich 3 Varianten aus diesem Produkt von denen 2 den eingestellten Preis behalten, eine Variante allerdings einen neuen, individuellen Preis bekommt (5 Euro). In der jeweiligen Variante löse ich also z.B. die Vererbung, trage den neuen Preis ein und speichere die bearbeitete Variante.

In der Storefront sehe ich zu, dass die .xml Datei neu erstellt wird. Hier habe ich auch die „Varianten als einzelne Produkte exportieren“ Checkbox gesetzt. Leider ist es aber nun so, dass alle Varianten meines Produktes den Standard-Preis in der .xml-Datei bekommen. Und eben die eine Variante nicht den neuen.

Im Template sieht die Zeile für die Preise aus wie folgt:

  {{ product.calculatedListingPrice.from.unitPrice|number_format(context.currency.decimalPrecision, '.', '') }}
  {{ context.currency.isoCode }}

Hat sich hier irgendwas verändert? Wenn nun jede Variante als eigenes Produkt exportiert wird müsste das doch so passen, oder?
Vielen Dank schon mal für die Antwort.

Liebe.

Versuche mal ob sich etwas ändert, wenn du den Index im Admin (Einstellungen > System > Cache) mal neu aufbaust. Die Listingpreise haben eigentlich einen Index, vllt. ist der nicht aktuell.

Heyhey, erstmal Danke für deine Antwort. Über den Admin habe ich es bereits versucht. Das hat allerdings leider nichts gebracht. Aber ich versuche es mal noch über die Console und melde mich mal, was es gegeben hat.

** EDIT:

Nope, bringt leider auch absolut nichts. Weitere Ideen irgendwer?

Das Verhalten scheint sich von 6.2 zu 6.3 geändert zu haben. Allerdings war es aus meiner Sicht in 6.2 buggy und ist nun korrekt.

Der calculatedListingPrice besteht aus “to” und “from” und enthält die günstigste und die teuerste Variante über alle Varianten hinweg. In 6.2 allerdings stand hier der Preis aus dem Produkt/Variante selbst und andere Varianten wurden nicht mit einbezogen (nur Staffelpreise). Hatte also quasi keinen Sinn bzw. hatte nur bei Staffelpreisen einen Mehrwert. Möchte man nun nicht immer den grünstigsten Preis exportieren, muss man auf den calculatedPrice zugreifen welcher den Preis aus dem Produkt/der Variante enthält. Wichtig ist, dass man das gleiche für den Grundpreis (refrencePrice) macht damit die wieder zusammenpassen.

Folgendes Code-Schnipsel sollte das verdeutlichen:

"{%- if product.calculatedPrice.referencePrice is not null -%}
{{(product.calculatedPrice.referencePrice.price | currency)}} / {{ product.calculatedPrice.referencePrice.referenceUnit }} {{ product.calculatedPrice.referencePrice.unitName }}
{%- endif -%}"

{% set price = product.calculatedListingPrice.from %}
"{%- if price.referencePrice is not null -%}
    {{ price.referencePrice.price|currency }} / {{ price.referencePrice.referenceUnit }} {{ price.referencePrice.unitName }}{#- -#}
{%- endif -%}"

 

PS: Mit hat es geholfen das Produkt-Struct zu sehen. Das habe ich über den json_encode Filter gemacht. -> {{product | json_encode}} und habe das Ergebnise HTMl-Decoded. Dann wird die Struktur auch wieder klarer.

2 Likes

Wow, das ist eine astreine Antwort, danke. Vorallem das PS ist ein sehr guter Hinweis! <3 Damit sollte man doch was anfangen können. Danke, Danke! :slight_smile:

**EDIT:

Habs mit deinen Hinweisen hinbekommen. Ich wollte einfach die plaine ausgabe der Preise der jeweiligen Varianten. Dazu habe ich das Template umgeschrieben und das g:price-Tag wie folgt geändert:

von:

{{ product.calculatedListingPrice.from.unitPrice|number_format(context.currency.decimalPrecision, ‚.‘, ‚‘) }} {{ context.currency.isoCode }}

zu:

{{ product.calculatedPrice.unitPrice|number_format(context.currency.decimalPrecision, ‚.‘, ‚‘) }} {{ context.currency.isoCode }}

1 Like

Der Moment, wenn andere Nutzer besseren Support geben als der bezahlte Support von Shopware  Frown

Wenn man einzelne Varianten als eigene Artikel (z.B. für Kabel in verschiedenen Längen) ausgeben möchte, sollte man das XML Template wie von @habundloot‍ beschrieben ändern.

Wer, wie ich, das Social Shopping Plugin von Shopware verwendet und sich wundert, wieso die Templates nicht bearbeitet werden können bzw. der Button zum Bearbeiten nicht sichtbar ist: Wenn man den Verkaufskanal, z.B. Google Shopping, aufruft, muss man die URL im Browser manuell bearbeiten.

Übersicht des Verkaufskanals: /admin#/sw/sales/channel/detail/6a37f29db39e4b8d980eb2d9abda860a/base
Template bearbeiten: /admin#/sw/sales/channel/detail/6a37f29db39e4b8d980eb2d9abda860a/product-comparison

Wenn man das “base” manuell nach Aufrufen der Seite durch “product-comparison” ersetzt, öffnet sich das Template und man kann es bearbeiten. Warum das versteckt wird, weiß nur Shopware…

Hallo, mit der Antwort von habundloot ist es leider nicht mehr möglich die Preise der Varianten auszugeben. Hat jemand ein ähnliches Problem welches gelöst wurde. Da die Preise der Varianten falsch im google Feed ausgegeben werden. Es wird immer der Preis der Hauptvariante genommen.

Anscheinend ist die Rückgabe von product.calculatedPrice.unitPrice weiterhin nicht ganz korrekt. Bei unterschiedlichen Währungen gibt die die Basiswährung aus, nicht aber z.B. CHF (Wert bleibt gleich, nur Währung ändert sich).

Ich denke das ist ein Bug. Konnte diesen „beheben“ durch:
(product.calculatedPrices|first).unitPrice

PS: Die Lösung ist maximal als Workaround zu empfehlen, wer weiß, was noch alles in product.calculatedPrices landen kann…