Ankündigung

Einklappen
Keine Ankündigung bisher.

Komma abfangen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Komma abfangen

    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;
            }
          [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');
    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;
          
          [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.

    #2
    Update: Code funktioniert auch in der 1.5er Version !

    Kommentar

    Info zu diesem Forenarchiv:
    Mit Release von 1.5.7 wurde die deutsche Zen Cart Version auf eine reine DIY-Lösung umgestellt.
    Für einen Support via Forum stehen keine personellen und zeitlichen Ressourcen mehr zur Verfügung.
    Dieses Supportforum bleibt im Nur-Lesen-Modus als Wissensarchiv noch online verfügbar.
    PM Funktionalität, Registrierung und Posten neuer Beiträge sind deaktiviert.
    Zugriff auf Anhänge in den Postings ist auch ohne Registrierung/Einloggen möglich.
    FAQ und Downloadbereich des Forums wurden in die neue umfangreiche Knowledgebase auf der zen-cart-pro.at Website übernommen.

    Das Development der deutschen Zen Cart Version geht wie bisher auf Github weiter.
    Wir werden auch weiterhin neue Versionen bereitstellen und die Onlinedokumentation/Knowledgebase aktualisieren.
    Fehler in der Software können auf Github als Issues gemeldet werden.
    Follow us
    aktuelle version
    Zen Cart 1.5.7 deutsch
    vom 20.05.2022
    [Download]
    Lädt...
    X