Grundpreis im Warenkorb bei Staffelpreisen

Hallo,

ich nehme gerade einige Änderungen an einem Theme vor. Gerne möchte ich im Warenkorb und im Ajax-Warenkorb den Grundpreis
angezeigt bekommen, was ich generell hinbekommen habe. Folgenden Code habe ich dazu eingefügt.

Im Child Theme habe ich im Ordner frontend\Checkout\ajax_cart_item.tpl eingefügt:

{extends file="parent:frontend/checkout/ajax_cart_item.tpl"}

{block name="frontend_checkout_ajax_cart_articlename_price"}
    {$smarty.block.parent}
    {if count($basketItem.additional_details.prices) > 0 && $basketItem.additional_details.prices[0].referenceprice}{assign var="price" value=$basketItem.additional_details.prices[0]}
({$price.referenceprice|currency}* / {$price.referenceunit} {$price.sUnit.unit})
    {/if}
{/block}

und im Ordner frontend\Checkout\items\product.tpl folgendes:

{* Product Einzelpreis *}
                        {block name='frontend_checkout_cart_item_details_eprice'}
                            
                                Einzelpreis: {$sBasketItem.price|currency}*
								{if $sBasketItem.additional_details.referenceprice}
({$sBasketItem.additional_details.referenceprice|currency}* / {$sBasketItem.additional_details.referenceunit}{$sBasketItem.additional_details.sUnit.unit})
{/if}                            
                        {/block}


{* Accumulated product price *}
        {block name='frontend_checkout_cart_item_total_sum'}
            
                {block name='frontend_checkout_cart_item_total_price_label'}
                    
                        {s name="CartColumnTotal" namespace="frontend/checkout/cart_header"}{/s}
                    
                {/block}
                {$sBasketItem.amount|currency}{block name='frontend_checkout_cart_tax_symbol'}{s name="Star" namespace="frontend/listing/box_article"}{/s}{/block}
		
		{if count($sBasketItem.additional_details.prices) > 0 && $sBasketItem.additional_details.prices[0].referenceprice}
		{assign var="price" value=$sBasketItem.additional_details.prices[0]}	

		({$price.referenceprice|currency} * / {$price.referenceunit} {$price.sUnit.unit}) 

Wie schon geschrieben, wird der Grundpreis ersteinmal richtig angezeigt. Allerdings habe ich bei Artikeln mit Staffelpreisen und Grundpreisangabe das Problem, dass sich
der Grundpreis bei Änderungen des Stückpreises nicht verändert. Der Grundpreis bleibt immer auf der Grundeinstellung stehen. Je nach Einstellung entweder beim
Grundpreis für ein Stück oder Grundpreis des günstigsten Preises. Auf der Artikeldetail Seite wird der Staffel und Grundpreis jeweils richtig ausgegeben. Ich habe dann versucht,
den Code bzw. die Variablen aus dem block_price.tpl


{block name="frontend_detail_data_block_prices_table_body_cell_reference_price"}
                                                        
                                                            {$blockPrice.referenceprice|currency}
                                                            /
                                                            {$sArticle.referenceunit} {$sArticle.sUnit.description}
                                                        
                                                    {/block}

zu nutzen. Leider hat auch das nicht zum gewünschten Ergebnis geführt. Der Grundpeis wurde nicht angezeigt.

Hat jemand eine Idee, wie ich es lösen kann? Zusammengefasst möchte ich also den richtigen Staffelgrundpreis im Warenkorb angezeigt bekommen.

Im Standard haben wir ja das “template für wesentliche Merkmale”, damit kannst du im Checkout den Grundpreis anzeigen lassen: Shopware 5 - Einstellungen - Bestellabschluss

Mit der nächsten Version kann man das Template auch optional für den Off-Canvas und den Warenkorb anzeigen lassen. 

Vielen Dank für den Hinweis. Der Weg ist mir auch bekannt, verursacht aber den selben Fehler.
Der Grundpreis bei Staffenpreisen wird nicht richtig übernommen. Durch die Änderung des
Einzelpreises (auf Grund der Staffel) müsste sich auch der Grundpreis ändern. Tut er aber
leider nicht.

Also wenn du das so wie in der Doku (Link von Moritz) einbindest, klappt das auch korrekt.
Ggf. nutzt du eine ältere Version? Mit dem Beispiel-Code klappt es auf jeden Fall.

Ich habe den Code aus der Doku

{if $sBasketItem.additional_details.referenceprice} Grundpreis {$sBasketItem.additional_details.referenceunit}{$sBasketItem.additional_details.sUnit.unit} = {$sBasketItem.additional_details.referenceprice|currency}* {/if} 

eingefügt und mit zwei verschiedenen Templates ausprobiert (inkl. Original Shopware). Bei beiden wird zwar der Grundpreis angezeigt, er ändert sich aber
nicht, wenn durch die Staffel der Einzelpreis sinkt. Ich nutze die Shopware Version 5.5.7.

Evtl. noch eine Idee, woran es liegen könnte?. Ich habe es erst auf das Template geschoben, aber wie geschrieben funktioniert es auch nicht mit dem
originalen Shopware Template.
 

Für Staffelpreise muss man die Doku in der Tat noch anpassen, ich nehme das mal mit.

Du hast aber bei den Preisen immer den korrekten ReferencePrice. Das könnte dann so aussehen:

{if $sBasketItem.additional_details.referenceprice} Grundpreis {$sBasketItem.additional_details.referenceunit}{$sBasketItem.additional_details.sUnit.unit} = 
{foreach item=price key=position from=$sBasketItem.additional_details.prices}
{if $sBasketItem.quantity >= $price.valFrom && $sBasketItem.quantity <= $price.valTo || !$price.valTo}
{$price.referenceprice|currency}{break}
{/if}
{/foreach}*{/if} 

3 „Gefällt mir“

Wenn man das jetzt noch so ergänzen könnte, das es ausschaut wie auf der Detailseite (z.B.: so: Inhalt: 2 kg (3,40 € * / 1 kg) ) bzw. generell der Inhalt der Verpackung vor dem Grundpreis passend zur Variante gezeigt würde, wäre ich extremst entzückt Thumb-Up

Das gleiche Problem habe ich auch, so wird es auf der Detailseite angezeigt

 

und so im Offcanvas-Warnkorb und im Warenkorb anzeigt

Hier müsste mornalerweise 7,46 € stehen

Naja, im Offcanvas wird es ja nunmal im Standard nicht ausgegeben, da musst du deine Anpassung überprüfen, die Lösung steht ja hier im Thread. (Ab 5.5.8 kann man aktivieren, dass das Feld aus den Grundeinstellungen genutzt wird).

Die Anpassung der Formatierung kann man ja einfach über die vorhandenen Variablen bewerkstelligen - das ist wirklich kein Hexenwerk. Im Dokuartikel steht auch wie das geht.

1 „Gefällt mir“

Vielen Dank für die wertvollen Hinweise. Dadurch konnte ich auch im Template die entsprechenden Änderungen durchführen.
Der Grundpreis steht somit jetzt richtig (auch bei Staffel Grundpreisen) an den Preisen im Warenkorb. Folgende Änderungen habe ich gemacht.

Im Ordner (Child Theme) frontend\Checkout\items\product.tpl folgendes:

{* Product Einzelpreis *}
{block name='frontend_checkout_cart_item_details_eprice'}

Einzelpreis: {$sBasketItem.price|currency}*
{if $sBasketItem.additional_details.referenceprice}
{foreach item=price key=position from=$sBasketItem.additional_details.prices}
{if $sBasketItem.quantity >= $price.valFrom && $sBasketItem.quantity <= $price.valTo || !$price.valTo}
									({$price.referenceprice|currency} * / {$price.referenceunit} {$price.sUnit.unit}){break}
	{/if}
	{/foreach}
	{/if}
	
        {/block}


{* Accumulated product price *}
{block name='frontend_checkout_cart_item_total_sum'}

{block name='frontend_checkout_cart_item_total_price_label'}

{s name="CartColumnTotal" namespace="frontend/checkout/cart_header"}{/s}

 {/block}
                {$sBasketItem.amount|currency}{block name='frontend_checkout_cart_tax_symbol'}{s name="Star" namespace="frontend/listing/box_article"}{/s}{/block}
		
		{if count($sBasketItem.additional_details.prices) > 0 && $sBasketItem.additional_details.prices[0].referenceprice}
		{assign var="price" value=$sBasketItem.additional_details.prices[0]}	

		{foreach item=price key=position from=$sBasketItem.additional_details.prices}
			{if $sBasketItem.quantity >= $price.valFrom && $sBasketItem.quantity <= $price.valTo || !$price.valTo}
				({$price.referenceprice|currency} * / {$price.referenceunit} {$price.sUnit.unit}) {break}
			{/if}
		{/foreach}		
	{/if}		
			
        {/block}

Im Child Theme habe ich im Ordner frontend\Checkout\ajax_cart_item.tpl eingefügt:

{extends file="parent:frontend/checkout/ajax_cart_item.tpl"}

{block name="frontend_checkout_ajax_cart_articlename_price"}
    {$smarty.block.parent}
    {if count($basketItem.additional_details.prices) > 0 && $basketItem.additional_details.prices[0].referenceprice}
	{assign var="price" value=$basketItem.additional_details.prices[0]}
	{foreach item=price key=position from=$sBasketItem.additional_details.prices}
	{if $sBasketItem.quantity >= $price.valFrom && $sBasketItem.quantity <= $price.valTo || !$price.valTo}
	
({$price.referenceprice|currency}* / {$price.referenceunit} {$price.sUnit.unit}){break}
	{/if}
{/foreach}
    {/if}

{/block}

 

Bei Änderung der Menge auf einen neuen Staffelpreis, wird auch der Grundpreis geändert.

 

Was mir halt noch immer fehlt ist die korrekte, zur gewählten Variante passende Ausgabe des Inhalts der Variante (also z.B. 100g, 200g usw.) - der Grundpreis wird zwar korrekt angezeigt, aber der ausgegebene Inhalt bleibt immer der gleiche der Grundvariante, siehe dieser Beitrag: https://forum.shopware.com/discussion/54598/wesentliches-artikelmerkmal-auf-bestellabschlussseite

Verstehe dich gerade nicht, der Codeschnippsel von Moritz Naczenski funktioniert top, selbst bei Varianten ( habe es gerade getestet ). 

Aktuelle Shopware-Version im Einsatz? Glaube in einer frühen 5er gab es da mal einen Bug (irgendwas kleiner 5.3).

Wenn man es genau so wie auf der Detailseite haben will (auch mit schönerer Code-Formatierung): 

{foreach item=price key=position from=$sBasketItem.additional_details.prices}
    {if $sBasketItem.quantity >= $price.valFrom && $sBasketItem.quantity <= $price.valTo || !$price.valTo}
        {assign var="referenceprice" value=$price.referenceprice}
        {break}
    {/if}
{/foreach}
{if $sBasketItem.additional_details.referenceprice} 
    Inhalt: {$sBasketItem.purchaseunit|string_format:"%.2f"} {$sBasketItem.itemUnit} ({$referenceprice|currency}* / {$sBasketItem.additional_details.referenceunit} {$sBasketItem.itemUnit})
{/if}

1 „Gefällt mir“

Ich habe schon die neueste Version im Einsatz, habe es aber seither nicht mehr probiert ob es jetzt klappt mit der richtigen Inhaltsausgabe, weil ich auf meinen Beitrag (https://forum.shopware.com/discussion/54598/wesentliches-artikelmerkmal-auf-bestellabschlussseite) keine Antwort bekommen hatte, dachte ich, es gäbe aktuell keine Lösung.

Ich habe es jetzt wie von dir beschrieben umgesetzt, es funktioniert wunderbar - hierfür 1.000.000x Danke!

Daher will ich heute auch mal nicht am Lob geizen: Shopware ist & bleibt für mich das beste Shopsystem Thumb-Up

kann es sein, dass es mit der 5.6.1 nicht mehr funktioniert ? Oder wo habe ich meinen Fehler ?

{extends file="parent:frontend/checkout/ajax_cart_item.tpl"}

{if $sBasketItem.purchaseunit && $sBasketItem.purchaseunit != 0}
   
      Inhalt:
   
   
      {$sBasketItem.purchaseunit|floatval} {$sBasketItem.additional_details.sUnit.description}
   
{/if}

{if $sBasketItem.purchaseunit && $sBasketItem.additional_details.referenceunit && $sBasketItem.purchaseunit != $sBasketItem.additional_details.referenceunit}
   
      ({$sBasketItem.additional_details.referenceprice|currency} * / {$sBasketItem.additional_details.referenceunit} {$sBasketItem.additional_details.sUnit.description})
   
{/if}

 

Mitlerweile brauchst du dafür aber eigentlich auch keine Template-Anpassung mehr. Wir haben vor einigen Versionen (irgendwo in der 5.5er Linie) das entsprechend in die Grundeinstellungen mit eingebaut. Dort gibt es die Einstellung “wesentiche Merkmale im gesamten Checkout Prozess anzeigen”.

Der Standardwert bei Neuinstallationen gibt jetzt auch den Grundpreis korrekt aus, sieht so aus:

{if $sBasketItem.purchaseunit && $sBasketItem.purchaseunit != 0}
                
                    Inhalt:
                
            
                
                    {$sBasketItem.purchaseunit|floatval} {$sBasketItem.additional_details.sUnit.description}
                
            {/if}
            
            {if $sBasketItem.purchaseunit && $sBasketItem.additional_details.referenceunit && $sBasketItem.purchaseunit != $sBasketItem.additional_details.referenceunit}
                
                    ({$sBasketItem.additional_details.referenceprice|currency}
                    * / {$sBasketItem.additional_details.referenceunit} {$sBasketItem.additional_details.sUnit.description})
                
            {/if}

Bei Staffelpreisen müsste man das Beispiel von oben nehmen.

1 „Gefällt mir“

Danke

Bei Neuinstallation schon - im Update bleibt offensichtlich das alte Template drin und die alte Überschreibung per Datei greift nicht mehr.

Habs geändert - jetzt funktionierts wieder.

Ja, beim Update überschreiben wir natürlich nicht die individuellen Settings. Da kann man ja auch ganz andere Dinge als den Grundpreis drin stehen haben.

Hallo,

ich muss diesen älteren Beitrag mal wieder aufwärmen.

Wir haben eine Abmahnung vom IDO-Verband bekommen, die allerdings nicht den Shop betrifft. Bei einem Artikel fehlte leider bei Google-Shopping der Grundpreis Undecided. Dennoch haben wir vorsichtshalber nochmal alle Angaben im Shop kontrolliert. Dabei ist mir aufgefallen, dass der Grundpreis bei Staffelpreisen im Warenkorb und Checkout nicht korrekt angezeigt wird. Wir haben im Template für die wesentlichen Merkmale den Code aus der Dokumentation stehen:

{if $sBasketItem.purchaseunit && $sBasketItem.purchaseunit != 0}
   
      Inhalt:
   
   
      {$sBasketItem.purchaseunit|floatval} {$sBasketItem.additional_details.sUnit.description}
   
{/if}

{if $sBasketItem.purchaseunit && $sBasketItem.additional_details.referenceunit && $sBasketItem.purchaseunit != $sBasketItem.additional_details.referenceunit}
   
      ({$sBasketItem.additional_details.referenceprice|currency} * / {$sBasketItem.additional_details.referenceunit} {$sBasketItem.additional_details.sUnit.description})
   
{/if}

Hiermit wird jedoch bei Staffelpreisen nur der Grundpreis bei Abnahme von 1 Stück angezeigt. Ich habe alle in diesem Thread angegebenen Codes ausprobiert, aber es gelingt mir leider nicht den korrekten Grundpreis bei Abnahme von höheren Staffelmengen anzuzeigen.

Könnt ihr mir weiterhelfen? Was muss im Template für die wesentlichen Merkmale stehen?

Wir setzen Version 5.5.10 ein.

Problem gelöst. Die Änderungen wurden anscheinend wegen eines Cache-Problems nicht angezeigt.

Falls noch jemand ohne große Programmiererfahrung auf der Suche nach einer einfachen Lösung ist: Den unten stehenden Code in den Grundeinstellungen - Storefront - Bestellabschluss in das Feld „Template für die wesentlichen Merkmale“ eingeben und Haken darunter setzen:

{if $sBasketItem.purchaseunit && $sBasketItem.purchaseunit != 0}
   
      Inhalt:
   
   
      {$sBasketItem.purchaseunit|floatval} {$sBasketItem.additional_details.sUnit.description}
   
{/if}



{if $sBasketItem.additional_details.referenceprice} (

{foreach item=price key=position from=$sBasketItem.additional_details.prices}
{if $sBasketItem.quantity >= $price.valFrom && $sBasketItem.quantity <= $price.valTo || !$price.valTo}
{$price.referenceprice|currency}{break}
{/if}
{/foreach}*/

{$sBasketItem.additional_details.referenceunit}{$sBasketItem.additional_details.sUnit.unit} 

)

{/if} 

Damit werden die Grundpreise auch bei Varianteartikeln und Staffelpreisen korrekt angezeigt