Bestimmte Warenkorb Menge für alle Artikel - erst dann bestellbar ?!?

Hallo zusammen,

ich habe da ein kleines Problem mit der Mindestbestellabnahme in den Warenkorb.

Wir haben einen Getränke-Shop mit Shopware 5, und möchten das man nicht weniger als 3 Kisten bestellen kann, erst dann soll der Bestellbutton aktiv sein.

Es soll nicht über den Mindestbestellwert laufen (Da die Kisten unterschiedliche Preise haben). Es sollen aber auch 3 unterschiedliche Kisten gekauft werden können.

Hat da einer eine Idee wie ich das Problem lösen kann?

Gibt es da eine Abfrage zu, wie z.B.

„Wenn 3Kisten dann Bestellbutton aktiv und wenn nur 2 oder weniger Kisten dann Bestellbutton deaktiviert“.

Danke im voraus

PS: Es sollte über eine Script gelöst werden und nicht über die im Backend Produkt Mindestabnahme, da 1 Kiste gekauft werden kann aber solange nicht mindestens 3 unterschiedliche oder gleiche Kisten im Warenkorb sein dürfen.

Ich hoffe ich habe es soweit gut erklärt, dass es verständlich ist. WENN NICHT BITTE NACHFRAGEN.

DANKE IN VORRAUS

Gruß TOM

Hast du es einmal über die „Mindestabnahme“ beim Produkt selbst versucht?

Die einfach Variante wäre im Warenkorb die Anzahl zu ermitteln und den Button ggf. zu blockieren oder mittels CSS zu deaktivieren (durch setzen einer CSS Klasse) - hm, das müsste im Template machen sein, wenn die Anzahl 3 fest ist. Ist jetzt nur so eine Idee, habe ich selber noch nicht ausprobiert.

Sollte das noch von anderen Faktoren abhängig oder beeinflussbar sein, dann wäre eine Plugin-Lösung der richtige Weg.

Erstmal vielen Dank für die Info.
Ja so weit bin ich ja auch, dass man es mit einer Abfrage schön lösen könnte, hast du da ein Ansatz für mich evtl. Also wo wie in etwas SERVER_REQUEST_… denke das es nur ein Ansatz ist.
Brauche nur leider wie schon beschrieben HILFE wie man es genau umsetzt.
Eine Abfrage auf eine URI ist kein Problem, nur wie mache ich das auf den Warenkorb Inhalt?

Vielen Dank im voraus

Nur den Button zu blockieren führt aber zu sofort zu Frust, da der Kunde ja nicht weiß warum das so ist.
Außerdem stellt sich die Frage, ob diese Regel für alle Artikel gilt oder nur für bestimmte (=> ggf. zusätzliches Freitextfeld am Artikel)

Ich würde daher ein Custom Theme anlegen (siehe Doku) und dort den Checkout entsprechend ergänzen. Dazu musst du mindestens folgende Dateien ableiten und anpassen:
shopware/actions.tpl
shopware/cart.tpl
shopware/error_messages.tpl

Wenn Du in deinem Theme den OffCanvas-Warenkorb nutzt (also der am rechten Rand einblendet sobald du einen Artikel in den Warenkorb legst), kannst Du die Variable $basketInfoMessage setzen, um der BenutzerIn direkt nach Änderungen im Warenkorb einen Hinweis zu geben, dass er/sie noch weitere Artikel in den Warenkorb legen muss, um die Bestellung abschließen zu können.

Sicher kann man auch ein Plugin bauen, aber wenn Du das nur für einen Shop benötigst, dann lohnt der zusätzliche Aufwand nicht, einfach eigenes Theme erstellen und ändern, fertig.

Falls Du Dich nicht so tief in Shopware reinschaffen willst, würde ich dir empfehlen, professionelle Hilfe in Anspruch zu nehmen.

LG Phil

Hallo phil, auf die Frage zurückzukommen, ob ich alle Artikel damit abfragen möchte, Ja ich möchte das es bei allen Artikel funktioniert. Der User, der dann bestellen will, bekommt eine Info, wenn er nur 1 oder 2 Artikel in den Warenkorb hat.
Leider habe ich keinen Ansatz an Code dafür, dieser würde mir schon helfen wie ich die Abfrage mache, wenn 1 oder 2 Artikel im Warenkorb sind, wird der Button einfach auf „is–icon-right is–disabled“ setzen.
Das eigene Theme habe ich ja auch schon, das ist nicht das Problem, auch im Code weiß ich schon wo ich was finde. Nur mir fehlt der Code in Smarty eine Abfrage wie z.b. bei PHP, da geht, es ja, auch wenn ich abfrage, wenn URL dann führe dieses oder jenes aus. Nur in Smarty code, wenn wie viele Artikel im Warenkorb sind, fehlt mir halt.
Hättest du da eine code für mich denn ich dann anpassen kann?

Das ist nur ein ganz einfaches Beispiel! Einfach in einer Testumgebung testen und ggf. noch anpassen. Mehr ist es eigentlich nicht. Es blendet die Button komplett aus. Man kann es aber auch umstellen um den Button eine zusätzliche CSS Klasse zu verleihen, welche den Button auf inaktiv setzt.

{extends file='parent:frontend/checkout/cart.tpl'}

{block name="frontend_checkout_actions_confirm"}

  {if $sBasket.content|count > 2}
    {$smarty.block.parent}
  {else}
    Bitte mind. 3 Artikel in den Warenlob legen.
  {/if}

{/block}


{block name="frontend_checkout_actions_confirm_bottom"}

  {if $sBasket.content|count > 2}
    {$smarty.block.parent}
  {else}
    Bitte mind. 3 Artikel in den Warenlob legen. 
  {/if}

{/block}

Guten Morgen R4M, das sieht sehr gut aus, ich probiere es direkt mal aus.
Melde mich gleich direkt nochmal wie die funktion sich macht.

Danke schon mal in voraus :+1:

Hallo R4M,

leider tut sich da nichts, wenn ich es in meinem Theme einbinden unter frontend/checkout/cart.tpl , habe ich da was vergessen?

Ich habe in der frontend/checkout/ajax_cart.tp drin, die den Hinweis gibt, wenn was in den Warenkorb gelegt wird Mindestbestellwert. Diese Funktion benötige ich ja dann nicht mehr wenn deine Funktioniert.
Folgender Code:

{extends file=„parent:frontend/checkout/ajax_cart.tpl“}

{block name=‚frontend_checkout_ajax_cart_alert_box‘}
{$smarty.block.parent}
{if {$sBasket.Amount} < 25}

class=„kita–alert is–info is–rounded“>
{include file=„frontend/_includes/messages.tpl“ type=„warning“ content="{s name=‚sKitaConfirmInfoMinimumSurcharge‘}Mindestbestellwert 3 Kisten Ihrer Wahl{/s}"}
gt;
{else}
{if {$sBasket.Amount} < 0}

class=„kita–alert is–info is–rounded“>
{include file=„frontend/_includes/messages.tpl“ type=„warning“ content="{s name=‚sKitaConfirmInfoMinimumSurcharge‘}Mindestbestellwert 0,00 EUR{/s}"}
gt;
{/if}
{/if}

Dieser funktioniert.

Ich hatte aber lieber dein Code wenn er funktionieren würde, denn hier habe ich die Möglichkeit so wie ich das aus deinem Code sehe, individuell einzustellen wie viele Artikel.

Könntest Du da bitte nochmal drüber schauen, was ich falsch mache?

Besten Dank

Die „cart.tpl“ muss natürlich in DEIN eigenes Theme! Danach das Theme neu kompilieren.

Habe ich gemacht, ich habe die cart.tpl in Frontend/EIGENES-THEME/frontend/checkout drin, habe den Cache und alles neue kompiliert aber im Warenkorb „offcanvas“ kommt leider weder die Meldung "Bitte mind. 3 Artikel in den Warenlok legen. " noch irgendwas, ich kann Artikel rein legen, selbst bei einem ist der Button Aktiv. Ich glaube ich sehe den Wald vor lauter Bäumen nicht.

PS: Habe mal eine Screenshot beigefügt

Und mit meiner Mindestbestellwert sieht es so aus aber da gibt er mir nur die Info Ausgabe und nicht die Kiste Anzahl

Wie schon erwähnt, es ist nur ein einfach Beispiel für den NORMALEN Warenkorb!

Normaler Warenkorb → cart.tpl
Offcanvas Warenkorb → ajax_cart.tpl

Wenn Anpassungen, dann muss es in beiden Templates passieren. In der „ajax_cart.tpl“ verbirgt sich der Button im Block „{block name=‚frontend_checkout_ajax_cart_open_checkout_inner‘}“. Muss also auch ein extra Template angelegt werden.

Ich nochmal :wink:

So sehen meine beiden Templates aus–>
Einmal die cart.tpl von dir die in dem Eigenen Theme hinterlegt ist:

{extends file='parent:frontend/checkout/cart.tpl'}

{block name="frontend_checkout_actions_confirm"}

  {if $sBasket.content|count > 2}
    {$smarty.block.parent}
  {else}
     Bitte mind. 3 Artikel in den Warenlob legen.
  {/if}

{/block}


{block name="frontend_checkout_actions_confirm_bottom"}

  {if $sBasket.content|count > 2}
    {$smarty.block.parent}
  {else}
      Bitte mind. 3 Artikel in den Warenlob legen. 
  {/if}

{/block}

Und einmal das Template für die ajax_cart.tpl das auch in dem Eigene Theme liegt.

{extends file='parent:frontend/checkout/ajax_cart.tpl'}

{block name="frontend_checkout_actions_confirm"}

  {if $sBasket.content|count > 2}
    {$smarty.block.parent}
  {else}
  {include file=„frontend/_includes/messages.tpl“ type=„warning“ content="{s name=‚sKitaConfirmInfoMinimumSurcharge‘}Mindestbestellwert 3 Kisten Ihrer Wahl{/s}"}
    
  {/if}

{/block}
{block name="frontend_checkout_actions_confirm_bottom"}

  {if $sBasket.content|count > 2}
    {$smarty.block.parent}
  {else}
  {include file=„frontend/_includes/messages.tpl“ type=„warning“ content="{s name=‚sKitaConfirmInfoMinimumSurcharge‘}Mindestbestellwert 3 Kisten Ihrer Wahl{/s}"}
    
  {/if}

{/block}

PS: Kannst Du damit evtl. etwas anfangen?

Danke im voraus

Naja, eigentlich funktioniert es ja, aber da halt noch weitere Artikel im Warenkorb liegen (Pfand, Mindermengenzuschlag) und somit die Bedingung „Anzahl Positionen im Warenkorb > 2“ erfüllt ist, ist es halt doch nicht so einfach wie gedacht.

Vermutlich musst du doch einen {foreach} über alle Einträge machen, und zB nur die aus einer bestimmten Kategorie zählen…

LG Phil

Moin Phil,
hast du da eine Idee wie es mit der {foreach} funktioniert?

Beste Grüße
SeoTom

Kuckst Du Smarty Doku: {foreach}, {foreachelse} | Smarty

LG Phil