Zum Inhalt

Bild 1

Geben Sie im Produktexport den Preis einer beliebigen Preisregel aus

4,95€

Zum Store Anleitung

Beschreibung

Dieses Plugin stellt im Produktexport von Shopware 6 einen Twig-Filter bereit, mit dem der erweiterte Preis (Staffelpreis) einer über ihren Namen benannten Preisregel ausgegeben wird. Ob diese Regel im Kontext des Exports überhaupt greifen würde, spielt dabei keine Rolle.

Hintergrund: Shopware stellt im Export-Template über product.calculatedPrices nur die Staffeln einer Regel bereit. Welche das ist, entscheidet der Rule Builder anhand des Kontexts, in dem der Export läuft. Eine bestimmte Regel lässt sich damit nicht ansprechen. Genau das leistet dieses Plugin: Es liest die hinterlegten Rohstaffeln des Produkts und berechnet den Preis der von Ihnen benannten Regel selbst.

Damit liefern Sie an Preisportale, Marktplätze oder Händlerfeeds genau den Preis, den das jeweilige Ziel sehen soll, zum Beispiel einen Händlerpreis oder eine B2B-Kondition, ohne dafür Preise doppelt zu pflegen.

Hat ein Produkt für die benannte Regel keinen eigenen Preis, wird automatisch der reguläre Produktpreis ausgegeben. Im Feed entsteht dadurch keine Lücke.

Technische Voraussetzung

Info

Keine Hintergrundprozesse, keine Plugin-Konfiguration

Dieses Plugin arbeitet ausschließlich im Moment des Produktexports. Es legt keine Scheduled Tasks an, benötigt keinen Message Consumer und keinen Admin Worker. Sie müssen dafür also nichts an Ihrer Cronjob- oder Worker-Konfiguration ändern.

Es gibt auch keine Konfigurationsseite im Plugin Manager. Die gesamte Steuerung erfolgt über den Filter im Export-Template. Das ist Absicht: So kann jeder Export eine andere Preisregel ausgeben, ohne dass an zentraler Stelle Werte gepflegt werden müssen.

1. Installation von Erweiterte Preise im Produktvergleich

Das Plugin über den Shopware Community Store beziehen und anschließend im Admin Bereich von Shopware installieren und aktivieren. Dies geht über "Meine Einkäufe" oder den direkten Plugin Upload im ZIP Format.

Nach der Aktivierung steht der Filter in allen Produktexport-Templates zur Verfügung. Ein Cache-Leeren ist in der Regel nicht nötig, schadet aber nicht.

2. Preisregel und erweiterte Preise vorbereiten

Das Plugin gibt Preise aus, die bereits in Shopware gepflegt sind. Es erzeugt selbst keine Preise. Voraussetzung sind daher zwei Dinge im Admin:

Eine Preisregel unter Einstellungen - Shop - Regeln. Der Name dieser Regel ist später Ihr Schlüssel im Template, zum Beispiel "Händlerpreis".

Erweiterte Preise am Produkt unter Kataloge - Produkte - Produkt öffnen - Reiter "Erweiterte Preise". Dort wählen Sie die Regel aus und hinterlegen den gewünschten Preis, bei Bedarf mit mehreren Mengenstaffeln.

Note

Die Regel muss im Kontext des Exports nicht greifen. Sie darf beliebige Bedingungen enthalten, die im Export niemals erfüllt sind. Der Filter liest den Preis trotzdem. Genau darin liegt der Zweck des Plugins.

3. Filter im Export-Template verwenden

Den Produktexport finden Sie unter Marketing - Produktvergleich. Öffnen Sie den gewünschten Export und wechseln Sie in das Template.

Der einfachste Fall, der Preis der Regel "Händlerpreis":

{{ product|advancedPrice('Händlerpreis') }}

Für die Ausgabe im Feed formatieren Sie den Wert wie gewohnt:

{{ product|advancedPrice('Händlerpreis')|number_format(2, '.', '') }}

Warning

number_format niemals direkt auf den Filter anwenden

Kann kein Preis ermittelt werden, liefert der Filter null. In Kombination mit |number_format(2) wird daraus 0.00, aus "nicht ermittelbar" würde also "kostenlos". Das ist im Feed ein echtes Risiko.

Sicher ist diese Schreibweise:

{%- set price = product|advancedPrice('Händlerpreis') -%}
{{ price is null ? '' : price|number_format(2, '.', '') }}

null rendert für sich genommen als leerer String. Wer stattdessen einen festen Ersatzwert braucht, nutzt den Parameter fallback, siehe Punkt 4.

4. Parameter im Detail

Der Filter nimmt bis zu drei Angaben entgegen.

Regel (Pflichtangabe)

Der Name der Preisregel, so wie er im Admin steht. Der Name wird getrimmt und ohne Rücksicht auf Groß- und Kleinschreibung verglichen, ' händlerpreis ' findet also 'Händlerpreis'.

Alternativ geben Sie die ID der Regel an. Das ist unempfindlich gegen spätere Umbenennungen im Admin:

{{ product|advancedPrice('018f2c1d9e7c7a1b8c4d5e6f70819203') }}

Note

Regelnamen sind in Shopware nicht eindeutig, es können mehrere Regeln denselben Namen tragen. In diesem Fall werden die Treffer nach Priorität absteigend durchlaufen und die erste Regel genommen, für die das Produkt tatsächlich einen Preis hat. Eine höher priorisierte Regel ohne Produktpreis verdeckt also nicht die Regel, die den Preis führt. Der Fall wird einmalig im Log vermerkt.

Menge (optional)

Bestimmt, welche Mengenstaffel gezogen wird:

{{ product|advancedPrice('Händlerpreis', 10) }}

Ohne Angabe wird mit der Mindestbestellmenge des Produkts gerechnet, mindestens jedoch mit 1. Bei einer Mindestbestellmenge von 5 wäre der Preis für 1 Stück ein Wert, den es im Shop nie gibt.

Genommen wird die erste Staffel, welche die Menge abdeckt. Überschreitet die Menge alle Staffeln, greift die letzte. Das ist dieselbe Auswahl, die auch der Warenkorb im Shop trifft.

Ersatzwert (optional)

Für Portale mit Pflichtfeldern, die keinen leeren Wert akzeptieren:

{{ product|advancedPrice('Händlerpreis', fallback=0) }}

Kombiniert mit einer Menge:

{{ product|advancedPrice('Händlerpreis', 10, fallback=0) }}

5. Vollständiges Preisobjekt verwenden

Brauchen Sie mehr als den reinen Stückpreis, etwa Steueranteile, den Streichpreis oder den Grundpreis, liefert die Funktion advancedPriceObject das komplette berechnete Preisobjekt:

{% set price = advancedPriceObject(product, 'Händlerpreis') %}
{{ price.unitPrice }}
{{ price.listPrice.price }}
{{ price.referencePrice.price }}

Enthalten sind der Steuersatz des Produkts, der Steuerkontext, die Währungsauswahl inklusive Währungsfaktor sowie Streichpreis, UVP und Grundpreis. Der Grundpreis wird dabei auf Basis des Regelpreises gebildet, nicht auf Basis des Listenpreises.

Note

unitPrice ist der Stückpreis. totalPrice und calculatedTaxes beziehen sich dagegen auf die gerechnete Menge. Bei einer Mindestbestellmenge von 10 liefert calculatedTaxes.amount also die Steuer für zehn Stück. Der Filter advancedPrice gibt immer den Stückpreis zurück.

6. Verhalten und Rückgabewerte

Situation advancedPrice advancedPriceObject
Regelpreis gefunden Stückpreis als Zahl vollständiges Preisobjekt
Produkt hat für die Regel keinen Preis regulärer Produktpreis reguläres Preisobjekt
Regelname existiert nirgends regulärer Produktpreis reguläres Preisobjekt
Name trifft mehrere Regeln Preis der höchstpriorisierten Regel mit Treffer dito
Filter außerhalb eines Produktexports genutzt Ersatzwert bzw. leer leer
Preis in der Export-Währung nicht ermittelbar Ersatzwert bzw. leer leer

Der Betrag kommt immer im Steuerkontext des Exports, also brutto bei einer Bruttokundengruppe und netto bei einer Nettokundengruppe. Regulärer Preis und Regelpreis passen im selben Feed damit zusammen.

Info

Der Export bricht nie ab

Der Filter wirft unter keinen Umständen eine Exception. Das ist bewusst so gebaut: Eine Exception aus dem Template würde in Shopware den gesamten Export abbrechen, nicht nur die betroffene Zeile. Probleme landen stattdessen als Warnung im Log, dabei zusammengefasst je Ursache und nicht je Produkt.

Wenn ein Feed also unerwartete Werte enthält, lohnt der Blick ins Log unter Einstellungen - System - Logs oder direkt in var/log/.

7. Häufige Fragen

Der Feed zeigt den normalen Preis statt des Regelpreises. Prüfen Sie, ob der Regelname im Template exakt der Regel im Admin entspricht und ob am Produkt für diese Regel tatsächlich ein erweiterter Preis gepflegt ist. Beides wird im Log vermerkt, falls es nicht zutrifft.

Muss die Regel im Verkaufskanal des Exports aktiv sein? Nein. Das Plugin prüft bewusst nicht, ob die Regel im Kontext des Exports greift.

Wirkt sich das Plugin auf die Laufzeit großer Feeds aus? Kaum. Die Staffelpreise liegen im Export ohnehin bereits im Speicher, es entsteht keine zusätzliche Abfrage je Produkt. Pro Exportlauf fällt lediglich eine Abfrage je unterschiedlichem Regelnamen an.

Verträgt sich das Plugin mit anderen Export-Plugins? Ja. Das Plugin greift nicht in den Produktexport selbst ein, sondern ergänzt nur eine Template-Funktion. Es überschreibt keine Shopware-Services.

Funktioniert der Filter in mehrsprachigen Exporten? Ja. Regelnamen sind in Shopware nicht übersetzbar und damit über alle Sprachen des Exports hinweg identisch.