Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: Kann mir bitte jmd den Datentyp double für Menge in kurzem Codeblock einfügen?

    Timm

    • Fördermitglied
    • Beiträge: 6.343
    Ich weiß Doppelposts sind blöd, aber anscheinend liest keiner im Paypal Thread mit.

    Ich bräuchte zum testen in folgendem Codeblock nur die Artikelmenge als Datentyp double deklariert. Für euch Profis doch ne schnelle Nummer. Dann könnte ich damit weitertesten.

    Code: PHP  [Auswählen]
    } else {
          for ($i = 0, $n = sizeof($order->products); $i < $n; $i ++) {
            $item[$i] = new Item();
            $item[$i]->setName($this->encode_utf8($order->products[$i]['name']))
                     ->setCurrency($order->info['currency'])
                     ->setQuantity($order->products[$i]['qty'])
                     ->setPrice($order->products[$i]['price'])
                     ->setSku(($order->products[$i]['model'] != '') ? $order->products[$i]['model'] : $order->products[$i]['id']);
          }  
        }

    Bsp, wie es für Versandkosten gemacht wurde und das halt für die Menge:
    Code: PHP  [Auswählen]
     $this->amount->setTotal($this->amount->getTotal() + $shipping_cost);
    zu
    Code: PHP  [Auswählen]
    $this->amount->setTotal($this->amount->getTotal() + (double)$shipping_cost);

    Bekomm das aber mit den vielen unterschiedlichen Klammern und Hochkommata nicht hin.

    Die komplette Frage und das Problem hab ich hier geschildert: MODUL: PayPal PLUS & PayPal Checkout Zahlungsmodule für modified eCommerce Shopsoftware

    Gruß Timm

    Linkback: https://www.modified-shop.org/forum/index.php?topic=39997.0

    awids

    • Experte
    • Beiträge: 3.790
    • Geschlecht:
    Mal so probiert?

    Code: PHP  [Auswählen]
    } else {
          for ($i = 0, $n = sizeof($order->products); $i < $n; $i ++) {
            $item[$i] = new Item();
            $item[$i]->setName($this->encode_utf8($order->products[$i]['name']))
                     ->setCurrency($order->info['currency'])
                     ->setQuantity((double)$order->products[$i]['qty'])
                     ->setPrice($order->products[$i]['price'])
                     ->setSku(($order->products[$i]['model'] != '') ? $order->products[$i]['model'] : $order->products[$i]['id']);
          }  
        }

    Timm

    • Fördermitglied
    • Beiträge: 6.343
    Hat leider nicht funktioniert. Vielleicht die falsche Stelle?

    In einer anderen Datei für meine Dezimalzahlen wird das so gemacht.

    Code: PHP  [Auswählen]
    // set new decimal quantity
            $_SESSION['cart']->contents[$products_id]['qty'] = (double) $qty;

    Bezieht sich also auf $qty. Könntest du das vielleicht in meinem Code oben nur darauf beziehen?

    Gruß Timm

    awids

    • Experte
    • Beiträge: 3.790
    • Geschlecht:
    Schreibst du bitte noch dazu, in welcher Datei du die Änderungen machen willst? Ich kann mit dem Snippet da gar nicht nachvollziehen, ob z. B. $qty nicht schon irgendwo definiert ist. Letztlich kommt das definieren einer neuen Variable letztlich doch wieder aufs selbe raus:

    Code: PHP  [Auswählen]
    } else {
          for ($i = 0, $n = sizeof($order->products); $i < $n; $i ++) {
           $qty = $order->products[$i]['qty'];
            $item[$i] = new Item();
            $item[$i]->setName($this->encode_utf8($order->products[$i]['name']))                 ->setCurrency($order->info['currency'])                 ->setQuantity((double)$qty)
                     ->setPrice($order->products[$i]['price'])
                     ->setSku(($order->products[$i]['model'] != '') ? $order->products[$i]['model'] : $order->products[$i]['id']);
          }  
        }

    Und muss es unbedingt (double) sein? Hast du auch mal andere Herangehensweise ausprobiert, z. B.:

    Code: PHP  [Auswählen]
    number_format($order->products[$i]['qty'], 2) // point decimal
    number_format($order->products[$i]['qty'], 2, ',', '') // comma decimal

    Oder so:

    Code: PHP  [Auswählen]
    sprintf('%0.2f',$order->products[$i]['qty'])

    Timm

    • Fördermitglied
    • Beiträge: 6.343
    Danke Alex. Es geht um die includes/external/paypal/classes/PayPalPayment.php.

    Hab die erste Lösung aus deinem letzten Post probiert, aber es ändert sich nichts an der Fehlermeldung. Aber besser als bei mir, wo statt Warenkorb öfter ne weiße Seite kam.  :flee-mrgreen:

    Ich habs etwas ausführlicher im Paypalthread beschrieben. Da es bei den Versandkosten durch ändern zu double funktioniert hat und es in meinem Fall ja auch um ein Dezimalstellenproblem geht, dachte ich, ich könnte zum testen für die Menge das auch mal als double deklarieren und schauen, ob sich wenigstens an der Fehlermeldung was tut. Dann hätte man vielleicht einen Lösungsansatz. Wahrscheinlich ist es aber wesentlich komplexer und mein try and error Ansatz führt zu nichts.

    Das Problem tritt bei Paypal im normalen Checkout nicht auf. Bei Paypal Express aber schon. Vielleicht weil bei Express mit Mengen gerechnet wird und bei Paypal im Checkout nur die Gesamtsumme übergeben wird. Oder weil mein Dezimalmengenmodul die Mengen zwar richtig an den Checkout schickt, aber Express aus dem Warenkorb heraus ja quasi ein Schritt dazwischen ist. Generell funktionieren Dezimalstellen mit beiden Paypalmodulen. Nur sobald bei mindestens 2 Artikeln die zweite NAchkommastelle nicht 0 ist, geht Express nicht mehr. Und leider muss um dem Warenkorb Dezimalmengen beizubringen, ziemlich viel hin und her manipuliert werden, dass ich mich wahrscheinlich an den Modulentwickler wenden sollte.

    Wenns so einfach gegangen wäre und man das im Paypalmodul hätte leicht einpflegen können und es dann keine Auswirkungen für den Normalnutzer gehabt hätte, dann  wäre das Paypalmodul weiterhin quasi updatesicher. So muss ich ja dann vielleicht bei jeder neuen Paypalversion das da einpflegen.

    Gruß Timm

    Timm

    • Fördermitglied
    • Beiträge: 6.343
    Problem hat sich erledigt.

    Wenn man vorläufige Versandkosten von Bspw 4.90 im Paypal Express Modul hinterlegt, gehen auf einmal auch mehrere Mengen mit zweiter Dezimalstelle einer 5 (also 1,35Stück + 1,45 Stück) durch.

    Ohne die vorläufigen Versandkosten gehts nicht durch. Nur wenn maximal eine Menge als zweite Dezimalstelle eine 5 hat.

    Vielleicht hilft das ja mal jemand anderem.

    Danke dennoch für die Hilfe.

    Gruß Timm
    8 Antworten
    4207 Aufrufe
    08. Mai 2010, 05:48:54 von hendrik
    5 Antworten
    5606 Aufrufe
    09. Mai 2012, 08:03:26 von Smart22
    5 Antworten
    3513 Aufrufe
    21. Oktober 2011, 11:43:10 von Maria87
               
    anything