Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:

Autor Thema: Kann mir bitte jmd den Datentyp double für Menge in kurzem Codeblock einfügen?  (Gelesen 249 mal)

Offline FräuleinGarn

  • Viel Schreiber
  • *****
  • Beiträge: 2.743
    • Teile Beitrag
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 Zahlungsmodul für modified eCommerce Shopsoftware

Gruß Timm

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

Online awids

  • Experte
  • *****
  • Beiträge: 2.414
  • Geschlecht: Männlich
    • Teile Beitrag
    • awids Onlineshop
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']);
      }  
    }

Offline FräuleinGarn

  • Viel Schreiber
  • *****
  • Beiträge: 2.743
    • Teile Beitrag
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

Online awids

  • Experte
  • *****
  • Beiträge: 2.414
  • Geschlecht: Männlich
    • Teile Beitrag
    • awids Onlineshop
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'])

Offline FräuleinGarn

  • Viel Schreiber
  • *****
  • Beiträge: 2.743
    • Teile Beitrag
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

Offline FräuleinGarn

  • Viel Schreiber
  • *****
  • Beiträge: 2.743
    • Teile Beitrag
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


Teile per facebook Teile per linkedin Teile per twitter

 


             
anything