Wir betreiben einen Patchworkshop, indem viel Meterware (Stoffe/Vliese) verkauft wird.
Um z.B. 1.10 Meter zu bestellen ist die Eingabe von Dezimalzahlen nötig.
Hier hat Zen Cart standartmäßig eine Überraschung auf Lager: Das Trennzeichen ist kein Komma sondern ein Punkt. (Die Amerikaner benutzen zum trennen von Dezimalzahlen standartmäßig einen Punkt).
Benutzt ein Kunde den Num Block zur Eingabe, wird der Wert nicht übernommen und das Komma gelöscht. Dies führte bei unseren Kunden zu viel Verwirrung und Ärger.
Zum abfagen des Kommas änderte ich folgende Datei ab:
includes/classes/shopping_cart.php
und zusätzlich:
Es gibt sicherlich noch elegantere Lösungen, aber so funktioniert es auch.
Ab nun ist die Eingabe von Kommas erlaubt und die Kunden müssen nicht den Punkt auf der Tastatur suchen.
Um z.B. 1.10 Meter zu bestellen ist die Eingabe von Dezimalzahlen nötig.
Hier hat Zen Cart standartmäßig eine Überraschung auf Lager: Das Trennzeichen ist kein Komma sondern ein Punkt. (Die Amerikaner benutzen zum trennen von Dezimalzahlen standartmäßig einen Punkt).
Benutzt ein Kunde den Num Block zur Eingabe, wird der Wert nicht übernommen und das Komma gelöscht. Dies führte bei unseren Kunden zu viel Verwirrung und Ärger.
Zum abfagen des Kommas änderte ich folgende Datei ab:
includes/classes/shopping_cart.php
Code:
function actionUpdateProduct($goto, $parameters) { global $messageStack; for ($i=0, $n=sizeof($_POST['products_id']); $i<$n; $i++) { $adjust_max= 'false'; if ($_POST['cart_quantity'][$i] == '') { $_POST['cart_quantity'][$i] = 0; } [B]// Komma im Warenkorb abfangen $new_qty = $_POST['cart_quantity'][$i]; $new_qty = str_replace(',', '.', $new_qty); $_POST['cart_quantity'][$i]=$new_qty; // End Komma abfangen[/B] if (!is_numeric($_POST['cart_quantity'][$i]) || $_POST['cart_quantity'][$i] < 0) { $messageStack->add_session('header', ERROR_CORRECTIONS_HEADING . ERROR_PRODUCT_QUANTITY_UNITS_SHOPPING_CART . zen_get_products_name($_POST['products_id'][$i]) . ' ' . PRODUCTS_ORDER_QTY_TEXT . zen_output_string_protected($_POST['cart_quantity'][$i]), 'error'); continue; } if ( in_array($_POST['products_id'][$i], (is_array($_POST['cart_delete']) ? $_POST['cart_delete'] : array())) or $_POST['cart_quantity'][$i]==0) { $this->remove($_POST['products_id'][$i]); } else { $add_max = zen_get_products_quantity_order_max($_POST['products_id'][$i]); $cart_qty = $this->in_cart_mixed($_POST['products_id'][$i]); $new_qty = $_POST['cart_quantity'][$i]; //echo 'I SEE actionUpdateProduct: ' . $_POST['products_id'] . ' ' . $_POST['products_id'][$i] . '<br>'; $new_qty = $this->adjust_quantity($new_qty, $_POST['products_id'][$i], 'shopping_cart');
Code:
function adjust_quantity($check_qty, $products, $stack = 'shopping_cart') { global $messageStack; if ($stack == '' || $stack == FALSE) $stack = 'shopping_cart'; $old_quantity = $check_qty; [B]//Komma abfangen $check_qty = str_replace(',', '.', $check_qty); // End Komma abfagen[/B] if (QUANTITY_DECIMALS != 0) { // $new_qty = round($new_qty, QUANTITY_DECIMALS); $fix_qty = $check_qty; [B]// Komma abfagen $fix_qty = str_replace(',', '.', $fix_qty); // End Komma abfagen[/B] switch (true) { case (!strstr($fix_qty, '.')): $new_qty = $fix_qty; //$messageStack->add_session('shopping_cart', ERROR_QUANTITY_ADJUSTED . zen_get_products_name($products) . ' - ' . $old_quantity . ' => ' . $new_qty, 'caution'); break; default: $new_qty = preg_replace('/[0]+$/','', $check_qty); [B]//Komma abfangen $new_qty = str_replace(',', '.', $new_qty); //End Komma abfagen[/B] // $messageStack->add_session('shopping_cart', 'A: ' . ERROR_QUANTITY_ADJUSTED . zen_get_products_name($products) . ' - ' . $old_quantity . ' => ' . $new_qty, 'caution'); break; } } else { if ($check_qty != round($check_qty, QUANTITY_DECIMALS)) { $new_qty = round($check_qty, QUANTITY_DECIMALS); $messageStack->add_session($stack, ERROR_QUANTITY_ADJUSTED . zen_get_products_name($products) . ERROR_QUANTITY_CHANGED_FROM . $old_quantity . ERROR_QUANTITY_CHANGED_TO . $new_qty, 'caution'); } else { $new_qty = $check_qty; } } return $new_qty; } }
Es gibt sicherlich noch elegantere Lösungen, aber so funktioniert es auch.
Ab nun ist die Eingabe von Kommas erlaubt und die Kunden müssen nicht den Punkt auf der Tastatur suchen.
Kommentar