Da ich selbst nach stundenlangem Probieren die Lösung des in der Folge beschriebenen Problems gefunden habe, möchte ich diese für Leute, denen es evtl. ähnlich geht, hier kurz beschreiben:
Problem
Nach der Migration von Shopware 5 auf Shopware 6 werden in den Produktlisten der Kategorien bei Varianten-Produkten, deren Varianten unterschiedliche Preise haben, keine „Ab“-Preise mehr angezeigt. (bei mir wurden bei einigen Produkten „Ab“-Preise angezeigt, bei anderen nicht)
Lösung
Der Preis des Elternartikels (Artikelnummer endet mit „M“) darf nicht dem Preis günstigsten Variante entsprechen!
In unserem Fall war das bei fast allen Varianten-Artikeln so, die aus Shopware 5 übernommen wurden, weil dort in der Vergangenheit immer erst die günstige Variante (kleinste Gebindegröße) angelegt wurde und auf deren Grundlage dann die anderen Varianten erzeugt wurden.
Am einfachsten ist es, bei allen Elternartikeln sowohl Preis als auch Streichpreis zu entfernen (Speichern nicht vergessen!)
… vielleicht erspart das dem/der ein oder anderen ja ein paar Stunden Sucherei und den Kauf eines Plugins.
Moin,
wir haben in unserem eigenem Template bei views/storefront/component/product/card/price-unit.html.twig den Part für den günstigsten Preis ausgeklammert.
Ich bin auch gerade dabei den SW5 auf SW6 zu bringen und frage mich immer mehr was die da zusammengeschrieben haben.
Wenn ich am Vater den Preis, so wie hier empfohlen, lösche, steht da zwar „Varianten ab 539 €“ aber drunter dann der Vater mit „Ab 0,00 €“.
Ich will im Listing ein Produkt anzeigen lassen und den Preis der billigsten Variante. Also so wie es im SW5 Standard war.
Die billigste Variante kostet 539 €, wenn das der Vater auch hat, dann fällt „Ab“ weg.
Setze ich den Preis des Vaters höher wird es noch schlimmer.
Sehe ich das also richtig, dass ich ohne eigene Programmierung keine ordentliche Anzeige mit „ab 539 €“ hinbekomme?
Dann muss ich mich echt fragen, was die da bei Shopware so machen.
Hei,
zuerst einmal muss ich mich entschuldigen, denn das beschriebene Vorgehen funktioniert so offensichtlich nicht im Standard-Theme, aber im von uns verwendeten Zenit-Theme! Dort scheint die entsprechende Klasse im Template bereits ausgeblendet zu sein.
Hier ein Lösungsansatz für das Standard-Theme:
Wenn Du Dir das folgende kostenlose Plugin installierst
und mit dessen Hilfe im CSS den Div-Container für die Cheapest-Price-Info ausblendest, sollte es funktionieren:
Und alles in allem muss ich Dir übrigens recht geben: Ich bin auch sehr verwundert, wie unausgegoren einige Dinge in SW6 nach der langen Zeit und bei Version 6.5.x noch sind! - Ich bin die Tage am Text-Editor gestrandet, der auch teilweise macht, was er will. Vor allem wenn man im HTML-Editor Dinge anpasst und speichert, verliert er bei uns gerne mal einfach den kompletten Code und man darf bei 0 anfangen, wenn man die Code nicht vorher kopiert hat. Scheinbar wird auch dort vorausgesetzt, dass man dafür noch ein Plugin für 130 Euro pro Jahr zukauft.
Ich hoffe, dass ich nicht noch auf mehrere solcher Baustellen stoße.
Habe mir angewöhnt nur in Notepad++ zu arbeiten und dann komplett zu kopieren.
Um Fair zu bleiben bereits weit vor Shopware 6.
Konnte mit diesen tiny editoren nie was anfangen
Ich hab folgende Datei angelegt:
custom/plugins/PLUGINNAME/src/Resources/views/storefront/component/product/card/price-unit.html.twig
Und das hier rein geschrieben.
{% sw_extends '@Storefront/storefront/component/product/card/price-unit.html.twig' %}
{% block component_product_box_price_info %}
{% set cheapest = product.calculatedCheapestPrice %}
{% set real = product.calculatedPrice %}
{% if product.calculatedPrices.count > 0 %}
{% set real = product.calculatedPrices.last %}
{% endif %}
{% set referencePrice = real.referencePrice %}
{% set displayFrom = product.calculatedPrices.count > 1 %}
{% set displayParent = product.variantListingConfig.displayParent and product.parentId === null %}
{% if displayParent %}
{% set displayFromVariants = displayParent %}
{% set real = cheapest %}
{% endif %}
<div class="product-price-info">
{% block component_product_box_price_unit %}
{{ parent() }}
{% endblock %}
{% block component_product_box_price %}
{{ parent() }}
{% endblock %}
</div>
{% endblock %}
Ich hab nur in der Zeile
{% set displayFromVariants = displayParent and real.unitPrice !== cheapest.unitPrice %}
" and real.unitPrice !== cheapest.unitPrice" gelöscht
Somit erscheint das „ab“ vor einem Preis, wenn er Varianten hat.
Jetzt besteht durchaus die Möglichkeit, dass das „ab“ auch davor steht, wenn alle Varianten das gleiche kosten. Wenn man das nicht will, selbst nochmal etwas anpassen und hier posten oder mich fragen und ich schaue es mir nochmal an. Zur Zeit habe ich keinen solchen Artikel und von daher im Moment keine Lust.
Über die Textbausteine „listing.listingTextFrom“ bekommt man es dann noch klein geschrieben.
Und damit auch in den ausgeklappten Suchervorschlägen das „ab“ zu sehen ist, sind auch an der Datei Änderungen vorzunehmen.
Ich hab folgende Datei angelegt:
custom/plugins/PLUGINNAME/src/Resources/views/storefront/layout/header/search-suggest.html.twig
{% sw_extends '@Storefront/storefront/layout/header/search-suggest.html.twig' %}
{% block layout_search_suggest_result_price %}
<div class="col-auto search-suggest-product-price">
{% set price = product.calculatedPrice %}
{% if product.calculatedPrices.count > 0 %}
{% set price = product.calculatedPrices.last %}
{% endif %}
{% if product.variantListingConfig.displayParent and product.parentId === null %}
{#% set displayFromVariants = price.unitPrice !== product.calculatedCheapestPrice.unitPrice %#}
{% set displayFromVariants = 1 %}
{% set price = product.calculatedCheapestPrice %}
{% endif %}
{% set referencePrice = price.referencePrice %}
{% if product.calculatedPrices.count > 1 or displayFromVariants %}
{{ 'listing.listingTextFrom'|trans|sw_sanitize }}
{% endif %}
<span class="search-suggest-product-price {{product.calculatedPrices.count}} qwe {{displayFromVariants}} abc {{price.unitPrice}} xyz {{product.calculatedCheapestPrice.unitPrice}}">
{{ price.unitPrice|currency }}{{ 'general.star'|trans|sw_sanitize }}
</span>
{% if price.referencePrice is not null %}
<br><small class="search-suggest-product-reference-price">({{ price.referencePrice.price|currency }}{{ 'general.star'|trans|sw_sanitize }} / {{ price.referencePrice.referenceUnit }} {{ price.referencePrice.unitName }})</small>
{% endif %}
{% if price.regulationPrice.price is not null %}
<small class="search-suggest-product-list-price">{{ 'general.listPricePreviously'|trans({'%price%': price.regulationPrice.price|currency }) }}{{ 'general.star'|trans|sw_sanitize }}</small>
{% endif %}
</div>
{% endblock %}
Hier geht es nur rein wenn es Varianten gibt.
{% if product.variantListingConfig.displayParent and product.parentId === null %}
Also kein abfragen der Preise, sondern setzen das es Varianten gibt.
{% set displayFromVariants = 1 %}
Wobei hier in meinem Fall oft beide gleich sind (wenn ich es ausgeben lasse) und bei manchen true rauskommt und bei anderen false. Absolut nicht nachvollziehbar.
Und somit kommt auch bei den ausgeklappten Suchvorschlägen ein ab vor dem Preis wenn es Varianten gibt.