Nicht-ganzzahlige Bestellmengen bei Shopware

//Nicht-ganzzahlige Bestellmengen bei Shopware

Mengenangaben mit Kommastellen für bestimmte Waren

 

Standardmäßig zwingt Shopware die Bestellmengen in eine ganze Zahl. Zwar können über die Verpackungseinheit bereits nicht-ganzzahlige Einheiten abgebildet werden, allerdings erschwert dies, etwa bei Meter- oder Kilo-Ware, einen ordentlichen Preisvergleich für Kunden und Preissuchmaschinen.

Meterware-Bild

Meterware centimeter-genau anbieten

 

Core-hack als quick & dirty-Lösung

Shopware erzwingt die Ganzzahligkeit explizit durch

$quantity = (int) $quantity;

in den Methoden sUpdateArticle und sAddArticle der sBasket-Klasse. Entfernt man diese Stellen aus dem Code und setzt in der Datenbank die Spalte quantity in der Tabelle s_order_basket auf double, so werden auch nicht-ganzzahlige Bestellmengen zugelassen.

Ganz wichtig ist es nun, sicherzustellen, dass $quantity ein Datenbank-freundlicher Zahlenwert ist. Also müssen wir daran denken, eine eingegebene Kommazahl mit Punkt statt Komma weiterzuleiten und SQL-Injections verhindern, indem wir keine Texteingabe zur Datenbank gelangen lassen. Außerdem wollen wir Eingaben mit 0 als Nachkommastelle (also z.B. „1,0“ oder „1.0“) als Integer weiterreichen, also

$quantity = str_replace(",",".", $quantity);
if(floor($quantity) == $quantity) {
     $quantity = (int) $quantity; 
} else {
     $quantity = (float) $quantity;
}

Allerdings ist eine solche Veränderung der Code-Basis („Core-Hack“) unschön und nicht update-sicher, da die Dateien beim Wechsel auf eine aktuellere Shop-Version überschrieben werden können.

 

Plug-in als aufwendigere und nachhaltige Lösung

Sauberer ist die Einbettung via Plug-In. Die Implementierung gestaltet sich ein wenig aufwendiger als zum Beispiel bei OXID, da die ersetzende Methode des Plug-Ins nicht denselben scope hat wie die ersetzte. Die $this-Referenzen müssen also ausgetauscht werden um über verschiedene Methodenaufrufe dieselbe Funktionalität zu gewährleisten.

So muss unter anderem

$this->sSystem->sDB_CONNECTION

beispielsweise durch

Shopware()->System()->sDB_CONNECTION
Bestellmengenfeld auf der Produktseite

Bestellmenge mit Kommazahl 

ersetzt werden, um auf dasselbe Datenbankobjekt zuzugreifen. Mit diesem lassen sich dann entsprechend dieselben Methoden wie in der Ausgangsfunktion aufrufen.

Nachdem man nicht-ganzzahlige Bestellmengen im sBasket-Objekt ermöglicht hat, wird man noch die Template-Blöcke zur Mengen-Eingabe mit dem Plug-In ersetzen wollen, so dass anstelle einer Dropdown-Liste eine Texteingabe möglich ist.

Als Plug-In im Shopware Store

Wir von commodule haben das plug-in als Standardversion vorprogrammiert. Sie können es im Shopware Store oder direkt bei uns bestellen. Mit diesem Plug-In werden

  • das drop-down Menü Auswahl der Bestellmenge bei den Produkt-Details und im Warenkorb durch ein Textfeld ersetzt und
  • die Verarbeitung von Mengenangaben mit Kommastellen durch das Shopware Shopsystem ermöglicht.
Bestellübersicht mit nicht-ganzzahliger Bestellmenge eines Artikels

Mengenangabe auch in der Übersicht mti Kommastellen

2018-01-31T17:36:33+00:00 Februar 19th, 2014|Allgemein|Kommentare deaktiviert für Nicht-ganzzahlige Bestellmengen bei Shopware