# Staffelpreise "Ab" statt "Bis"

**URL:** <https://forum.shopware.com/t/staffelpreise-ab-statt-bis/91946>\
**Category:** Allgemein\
**Created:** [13. Dezember 2021 um 11:02 UTC](https://forum.shopware.com/t/staffelpreise-ab-statt-bis/91946 "2021-12-13T11:02:51Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![hochkant](https://avatars.discourse-cdn.com/v4/letter/h/45deac/32.png) [@hochkant](https://forum.shopware.com/u/hochkant)\
**Post date:** [13. Dezember 2021 um 11:02 UTC](https://forum.shopware.com/t/staffelpreise-ab-statt-bis/91946/1 "2021-12-13T11:02:51Z")

</div>

Hallo Community,

wir würden gerne für die Erweiterte Preisdarstellung nur „Ab“ Preise ausgeben:

- Ab 10 „Preis“
- Ab 20 "Preis "
- Ab 30 "Preis "  
usw.

aktuell werden die Preise mit einer „Bis“ Logik dargestellt.

Habt irgendwer eine Idee?

 ![Bildschirmfoto 2021-12-13 um 12.00.50](https://europe1.discourse-cdn.com/flex013/uploads/shopware/original/2X/4/44275b15392c991ce8a1cbf1632d970f63fc8be0.jpeg)

---

<div class="post-metadata">

**Author:** ![Max\_Shop](https://avatars.discourse-cdn.com/v4/letter/m/58f4c7/32.png) [@Max\_Shop](https://forum.shopware.com/u/Max_Shop)\
**Post date:** [13. Dezember 2021 um 12:45 UTC](https://forum.shopware.com/t/staffelpreise-ab-statt-bis/91946/2 "2021-12-13T12:45:34Z")

</div>

Das wurde schon einmal im Forum diskutiert, nicht all zu lange her.

Ohne die Suche bemüht zu haben, glaube ich mich zu erinnern, dass das Ergebnis war das Template anzupassen. Es gibt aber auch Plugins dafür.

---

<div class="post-metadata">

**Author:** ![hochkant](https://avatars.discourse-cdn.com/v4/letter/h/45deac/32.png) [@hochkant](https://forum.shopware.com/u/hochkant)\
**Post date:** [13. Dezember 2021 um 13:01 UTC](https://forum.shopware.com/t/staffelpreise-ab-statt-bis/91946/3 "2021-12-13T13:01:42Z")

</div>

Danke, kannst du bitte die Diskussion verlinken? Ich kann sie leider nicht finden. Ein Plugin Vorschlag wäre auch top. Kann hierzu auch keine Lösung im Store finden… 🤷‍♂️

---

<div class="post-metadata">

**Author:** ![Max\_Shop](https://avatars.discourse-cdn.com/v4/letter/m/58f4c7/32.png) [@Max\_Shop](https://forum.shopware.com/u/Max_Shop)\
**Post date:** [13. Dezember 2021 um 14:46 UTC](https://forum.shopware.com/t/staffelpreise-ab-statt-bis/91946/4 "2021-12-13T14:46:30Z")

</div>

Ich finde die Diskussion auf die Schnelle auch nicht über die Suche, sorry. Vermutlich wurde das Wort Staffelpreis nicht verwendet.

Im Store gibt es in der Tat kein Plugin das bis zu ab ändert. Echt erstaunlich.

Solch ein Plugin sollte aber schnell gemacht sein. Lediglich das bis zu ab ändern und den Wert x +1, außer beim letzten Wert. Das lässt sich innerhalb einer twig Datei bewerkstelligen.

---

<div class="post-metadata">

**Author:** ![federballer](https://avatars.discourse-cdn.com/v4/letter/f/3e96dc/32.png) [@federballer](https://forum.shopware.com/u/federballer)\
**Post date:** [6. Februar 2022 um 19:56 UTC](https://forum.shopware.com/t/staffelpreise-ab-statt-bis/91946/5 "2022-02-06T19:56:47Z")

</div>

@Max_Shop & @hochkant ich bin grade auch auf der Suche nach einer Lösung. Ich habe mir dazu via „Custom Template Manager“ Plugin die entsprechende TWIG Datei ("/page/product-detail/buy-widget-price.html.twig") rausgesucht.  
Die entsprechende Stelle habe ich auch gefunden.

Die sieht so aus:  
{% if loop.last %}  
{{ „detail.priceDataInfoFrom“|trans|sw\_sanitize }}  
  
{{ price.quantity }}  
{% else %}  
{{ „detail.priceDataInfoUntil“|trans|sw\_sanitize }}  
  
{{ price.quantity }}  
{% endif %}

Der obere If-Bereich steuert den letzten Wert bei der Preisstaffelung (z.B. Screenshot Wert ab 22). Der untere Bereich steuert die anderen Staffelmengen. Damit in jeder Zeile, statt „Bis“ jetzt „Ab“ angezeigt wird muss man einfach bei „detail.priceDataInfoUntil“ das Until auf From umbenennen. Dann zieht er sich auch an der Stelle den anderen Textbaustein.

Jetzt zu meinem Problem, wo hier vielleicht einer die Lösung kennt:  
Die Staffellungen sind bei mir nicht immer gleich. Sprich bei einer Produktkategorie ist die Staffelung immer in 20er Schritten und bei einer anderen in 1er Schritten.  
Das bedeutet ich kann nicht einfach {{ price.quantity -1 }} anwenden.  
Wisst ihr wie ich eine generische Lösung finde, die immer den passenden „AB-Wert“ auswählt?

---

<div class="post-metadata">

**Author:** ![Max\_Shop](https://avatars.discourse-cdn.com/v4/letter/m/58f4c7/32.png) [@Max\_Shop](https://forum.shopware.com/u/Max_Shop)\
**Post date:** [7. Februar 2022 um 08:47 UTC](https://forum.shopware.com/t/staffelpreise-ab-statt-bis/91946/6 "2022-02-07T08:47:00Z")

</div>

Du musst einfach dem Schleifen-Index um eines hoch bzw. runtersetzen. Rein von der Logik, ohne es jetzt geprüft zu haben.

---

<div class="post-metadata">

**Author:** ![normster](https://avatars.discourse-cdn.com/v4/letter/n/2bfe46/32.png) [@normster](https://forum.shopware.com/u/normster)\
**Post date:** [16. Mai 2022 um 14:43 UTC](https://forum.shopware.com/t/staffelpreise-ab-statt-bis/91946/7 "2022-05-16T14:43:22Z")

</div>

Hatte heute das selbe Thema. Hier ein Template Snippet welches die Preise wie folgt darstellt:  
 ![Screenshot_20220516_164113](https://europe1.discourse-cdn.com/flex013/uploads/shopware/original/3X/4/f/4feb389cb4cc34a699287bd4b0f0840289040ed0.png)

relevante Änderungen:  
{% set i = 0 %}  
{% set i = i + 1 %}  
{% if loop.last %} (gesamte if Abfrage)

evtl geht es auch einfacher/besser - aber mit „it works“ bin ich schon ganz zufrieden.

```auto
{% sw_extends '@Storefront/storefront/page/product-detail/buy-widget-price.html.twig' %}

{% block page_product_detail_price_block_table_body_inner %}
	{% set i = 0 %}
	{% for price in page.product.calculatedPrices %}
		{% block page_product_detail_price_block_table_body_row %}
			<tr class="product-block-prices-row"
				itemprop="offers" itemscope
				itemtype="https://schema.org/Offer">

				{% block page_product_detail_price_block_table_body_cell_quantity %}
					<th scope="row" class="product-block-prices-cell product-block-prices-cell-thin">
						<meta itemprop="priceCurrency" content="{{ page.header.activeCurrency.translated.shortName }}" />
						<meta itemprop="price" content="{{ price.unitPrice }}" />
						<link itemprop="availability" href="https://schema.org/InStock" />

						{% if loop.last %}
							{{ "detail.priceDataInfoFrom"|trans|sw_sanitize }}
							<span class="product-block-prices-quantity">{{ price.quantity }}</span>
						{% elseif loop.first %}
							{{ "detail.priceDataInfoUntil"|trans|sw_sanitize }}
							<span class="product-block-prices-quantity">{{ price.quantity }}</span>
						{% else %}
							{{ "detail.priceDataInfoFrom"|trans|sw_sanitize }}
							<span class="product-block-prices-quantity">{{ page.product.calculatedPrices.elements[i - 1].quantity + 1 }}</span>
						{% endif %}

					</th>
				{% endblock %}

				{% block page_product_detail_price_block_table_body_cell_price %}
					<td class="product-block-prices-cell">
						{% sw_include '@Storefront/storefront/component/product/block-price.html.twig' with {
							price: price
						} only %}
					</td>
				{% endblock %}

				{% block page_product_detail_price_block_table_body_cell_reference_price %}
					{% if price.referencePrice is not null %}
						<td class="product-block-prices-cell product-block-prices-cell-thin">
							{{ price.referencePrice.price|currency }}{{ "general.star"|trans|sw_sanitize }} / {{ price.referencePrice.referenceUnit }} {{ price.referencePrice.unitName }}
						</td>
					{% endif %}
				{% endblock %}
			</tr>
		{% endblock %}
		{% set i = i + 1 %}
	{% endfor %}
{% endblock %}

```

---

<div class="post-metadata">

**Author:** ![KSachse](https://avatars.discourse-cdn.com/v4/letter/k/dec6dc/32.png) [@KSachse](https://forum.shopware.com/u/KSachse)\
**Post date:** [7. Juli 2024 um 14:20 UTC](https://forum.shopware.com/t/staffelpreise-ab-statt-bis/91946/8 "2024-07-07T14:20:10Z")

</div>

Hallo leider passiert bei mir nichts, wenn ich das Snippet einbaue. Cache habe ich geleert und auch das Template neu kompiliert. Was muss noch beachtet werden. Danke

---

<div class="post-metadata">

**Author:** ![DCS](https://avatars.discourse-cdn.com/v4/letter/d/85f322/32.png) [@DCS](https://forum.shopware.com/u/DCS)\
**Post date:** [13. Dezember 2024 um 16:30 UTC](https://forum.shopware.com/t/staffelpreise-ab-statt-bis/91946/9 "2024-12-13T16:30:19Z")

</div>

Hallo, ich muss dieses Thema nochmal aufnehmen, da ich aktuell vor dem gleichen Problem in Version 6.6.9.0 stehe und die eigentliche Frage von „ab“ statt „bis“ nicht wirklich beantwortet oder gelöst wurde… bzw alle Vorschläge führen nicht zum gewünschten Ergebnis.

Die Staffelpreise in SW6.6 werden aktuell so dargestellt:

 ![staffelpreise_sw6](https://europe1.discourse-cdn.com/flex013/uploads/shopware/original/3X/9/7/9738e9244968873f5e41855818b3e4e8938afd66.jpeg)

Der Kunde hätte aber lieber so:

 ![staffelpreise_sw6_wunsch](https://europe1.discourse-cdn.com/flex013/uploads/shopware/original/3X/c/c/cc0d814d2bad23f893a7606fb2130aa48219cfc2.jpeg)

Wenn ich über den TemplateManager das detail.priceDataInfoUntil auf detail.priceDataInfoFrom ändere, ändert sich zwar die Bezeichnung Bis auf Ab, aber nicht die Zahl dahinter.

Jemand eine Idee oder Lösung?

---

<div class="post-metadata">

**Author:** ![HolzFrank](https://avatars.discourse-cdn.com/v4/letter/h/8e7dd6/32.png) [@HolzFrank](https://forum.shopware.com/u/HolzFrank)\
**Post date:** [22. Januar 2025 um 10:08 UTC](https://forum.shopware.com/t/staffelpreise-ab-statt-bis/91946/10 "2025-01-22T10:08:25Z")

</div>

Hey, hatte das gleiche Problem. Das hat mir ChatGPT o1 ausgeworfen. Auf den ersten Blick funktioniert es. Wichtig nicht das alte TWIG verwenden! Gerne mal prüfen.

```auto
{% sw_extends '@Storefront/storefront/component/buy-widget/buy-widget-price.html.twig' %}

{# Wir überschreiben nur den Teil für den Tabellen-Body der Staffelpreise #}
{% block buy_widget_price_block_table_body_inner %}
    {# Startwert für "Ab x" #}
    {% set prevQuantity = 1 %}

    {% for price in product.calculatedPrices %}
        <tr class="product-block-prices-row"
            itemprop="offers" itemscope itemtype="https://schema.org/Offer">
            
            <th scope="row" class="product-block-prices-cell product-block-prices-cell-thin">
                <meta itemprop="priceCurrency" content="{{ page.header.activeCurrency.translated.shortName }}">
                <meta itemprop="price" content="{{ price.unitPrice }}">

                {# Immer "Ab" verwenden (Snippet detail.priceDataInfoFrom z. B. "Ab") #}
                {{ 'detail.priceDataInfoFrom'|trans|sw_sanitize }}
                <span class="product-block-prices-quantity">
                    {# Hier geben wir den aktuellen Startwert aus #}
                    {{ prevQuantity }}
                </span>
            </th>

            <td class="product-block-prices-cell">
                {% sw_include '@Storefront/storefront/component/product/block-price.html.twig' with {
                    price: price
                } only %}
            </td>

            {% if price.referencePrice is not null %}
                <td class="product-block-prices-cell product-block-prices-cell-thin">
                    {{ price.referencePrice.price|currency }}{{ 'general.star'|trans|sw_sanitize }}
                    / {{ price.referencePrice.referenceUnit }} {{ price.referencePrice.unitName }}
                </td>
            {% endif %}
        </tr>

        {# Nach dem Rendern der aktuellen Zeile setzen wir "prevQuantity" auf Obergrenze +1 #}
        {% set prevQuantity = price.quantity + 1 %}
    {% endfor %}
{% endblock %}

```

---

<div class="post-metadata">

**Author:** ![wichtelfraeulein](https://avatars.discourse-cdn.com/v4/letter/w/ba8739/32.png) [@wichtelfraeulein](https://forum.shopware.com/u/wichtelfraeulein)\
**Post date:** [28. Januar 2025 um 15:32 UTC](https://forum.shopware.com/t/staffelpreise-ab-statt-bis/91946/11 "2025-01-28T15:32:49Z")

</div>

Ich habe gerade das gleiche gesucht und den Ansatz von @HolzFrank eingebaut - schaut auf den ersten Blick gut aus 😀 👍

---

<div class="post-metadata">

**Author:** ![c.voigt](https://avatars.discourse-cdn.com/v4/letter/c/ad7895/32.png) [@c.voigt](https://forum.shopware.com/u/c.voigt)\
**Post date:** [23. Mai 2025 um 07:26 UTC](https://forum.shopware.com/t/staffelpreise-ab-statt-bis/91946/12 "2025-05-23T07:26:45Z")

</div>

Hallo zusammen, falls noch wehr in einer älteren Shopware version sucht.

Habe es für Shopware 6.4.20.2 geschrieben.  
ich prüfe über die Rule Builder die Preisgruppe und suche dan nach der Staffel größe.

```auto
{% sw_extends '@Storefront/storefront/page/product-detail/buy-widget-price.html.twig' %}

{% block page_product_detail_price_block_table_body_cell_quantity %}
	<th scope="row" class="product-block-prices-cell product-block-prices-cell-thin">
	<meta itemprop="priceCurrency" content="{{ page.header.activeCurrency.translated.shortName }}" />
	<meta itemprop="price" content="{{ price.unitPrice }}" />

	{% if loop.last %}
		{{ "detail.priceDataInfoFrom"|trans|sw_sanitize }}
		<span class="product-block-prices-quantity">{{ price.quantity }}</span>	
	{% else %}
		{% for staffel in page.product.prices.elements %}	
			{% if staffel.ruleId == page.product.cheapestPrice.ruleId %}
				{% if staffel.quantityEnd == price.quantity %}

					{% if staffel.quantityStart == 1 %}
						{{ "detail.priceDataInfoUntil"|trans|sw_sanitize }}
						{{staffel.quantityEnd}}
					{% else %}
						{{ "detail.priceDataInfoFrom"|trans|sw_sanitize }}
					    {{staffel.quantityStart}}
					{% endif %}

				{% endif %}
			{% endif %}
		{% endfor %}
	{% endif %}

	</th>
{% endblock %}

```

Falls ihr alle in Ab möchtet löscht die if abfrage ( staffel.quantityStart == 1 ) und last nur ( staffel.quantityStart ) stehen.

```auto
{% if staffel.quantityEnd == price.quantity %}

    {{ "detail.priceDataInfoFrom"|trans|sw_sanitize }}
    {{staffel.quantityStart}}

{% endif %}

```
