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


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;
        }
      // 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
        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');
und zusätzlich:

Code:
function adjust_quantity($check_qty, $products, $stack = 'shopping_cart') {
    global $messageStack;
     if ($stack == '' || $stack == FALSE) $stack = 'shopping_cart';
      $old_quantity = $check_qty;
      
      //Komma abfangen 
      $check_qty = str_replace(',', '.', $check_qty);
      // End Komma abfagen
      
      if (QUANTITY_DECIMALS != 0) {
        //          $new_qty = round($new_qty, QUANTITY_DECIMALS);
        $fix_qty = $check_qty;
        
        // Komma abfagen
        $fix_qty = str_replace(',', '.', $fix_qty);
        // End Komma abfagen
        
          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);
         
         //Komma abfangen
          $new_qty = str_replace(',', '.', $new_qty);
          //End Komma abfagen
          
//            $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.