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: class shopping_cart.php, Funktion wird x-fach ausgeführt

    JWi

    • Frisch an Board
    • Beiträge: 50
    Ich wusste leider keinen besseren Titel für meinen Beitrag.

    Mit einem Bekannten lerne ich das Shopsystem immer mehr kennen und stoße nun zum ersten Mal auf eine Ungereimtheit.

    In der class shopping_cart wird die Methode xtcGetOptionPrice() aus der class xtcPrice aufgerufen.
    In Zeile 448 der shopping_cart-Klasse wird die Methode calculate() aufgerufen. Wenn ich mir den Inhalt von
    Code: PHP  [Auswählen]
    $this->contents
    vor der Zeile 459 ausgeben lassen erhalte ich 2-mal die Ausgabe:
    Code: PHP  [Auswählen]
    458: Array
    (
        [1{1}3] => Array
            (
                [qty] => 1
                [attributes] => Array
                    (
                        [1] => 3
                    )
            )
    )

    Wieso erfolgt die Ausgabe 2-mal, obwohl nur ein Artikel mit einem Attribut im Warenkorb ist?

    Gehe ich dann auf die Warenkorbseite erfolgt die Ausgabe des Arrays sogar 7-mal !
    Damit einher geht ja auch jedes Mal die Datenbankabfrage.

    Ist das ein Fehlerverhalten oder ein Bug? Denn ich stelle mit gerade vor, wie es aussieht, wenn ein Artikel zum Beispiel 5 Attribute hat.

    Bei dem Test handelt es sich um die aktuelle 2.0.5.1-Version des Shopsystems.

    LG
    Jenny

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

    GTB

    • modified Team
    • Gravatar
    • Beiträge: 6.306
    • Geschlecht:
    Re: class shopping_cart.php, Funktion wird x-fach ausgeführt
    Antwort #1 am: 30. April 2020, 16:45:35
    Hallo,

    das ist ein guter Hinweis.
    Die mehrfache Ausführung erfolgt bei diversen Aufrufen. wie show_total(), show_weight(), show_tax().

    Hier kann in der Tat ein static Cache gemacht werden, denn es sollte ausreichen, die Berechnung nur 1x zu berechnen.
    In Revision r12742 umgesetzt.

    Gruss Gerhard

    JWi

    • Frisch an Board
    • Beiträge: 50
    Re: class shopping_cart.php, Funktion wird x-fach ausgeführt
    Antwort #2 am: 30. April 2020, 17:01:17
    Hallo Gerhard,

    das freut mich aber, dass ich mit dem Hinweis zu einer Verbesserung des Systems beitragen kann.

    Vielleicht sollte man in dem Atemzug auch gleich einmal nachsehen, wieso es für die Attributberechnung einmal die Methode xtcGetOptionPrice() in der class xtcPrice gibt und einmal die Methode attributes_price() in der class shopping_cart.

    Oder verwechsele ich da etwas?

    LG
    Jenny

    P.S. Kann man das Changeset nicht herunterladen?

    GTB

    • modified Team
    • Gravatar
    • Beiträge: 6.306
    • Geschlecht:
    Re: class shopping_cart.php, Funktion wird x-fach ausgeführt
    Antwort #3 am: 30. April 2020, 17:35:19
    Die attributes_price() verwendet doch die xtcGetOptionPrice().

    Das Changeset ist nicht Funktionsrelevant und wird erst mit dem nächsten Release zur Verfügung gestellt.

    Gruss Gerhard

    JWi

    • Frisch an Board
    • Beiträge: 50
    Re: class shopping_cart.php, Funktion wird x-fach ausgeführt
    Antwort #4 am: 30. April 2020, 17:44:01
    Hallo Gerhard,

    da hatte ich mich wohl ein wenig unglücklich ausgedrückt.
    In der Methode calculate() steht folgendes:

    Code: PHP  [Auswählen]
    if (isset($this->contents[$products_id]['attributes'])) {
              reset($this->contents[$products_id]['attributes']);
              foreach ($this->contents[$products_id]['attributes'] as $option => $value) {
                $values = $xtPrice->xtcGetOptionPrice($product['products_id'], $option, $value);
                //new module support
                $values['price'] = $this->shoppingCartModules->calculate_option_price($values['price'], $option, $value, $products_id, $qty);
                $this->weight += $values['weight'] * $qty;
                $total += $values['price'] * $qty;
                $attribute_price += $values['price'];
              }
            }

    Und in der Methode attributes_price() steht dies:

    Code: PHP  [Auswählen]
    if (isset($this->contents[$products_id]['attributes'])) {
          reset($this->contents[$products_id]['attributes']);
          foreach ($this->contents[$products_id]['attributes'] as $option => $value) {
            $values = $xtPrice->xtcGetOptionPrice($products_id, $option, $value);
            //new module support
            $values['price'] = $this->shoppingCartModules->calculate_option_price($values['price'], $option, $value, $products_id, $qty);
            $attributes_price += $values['price'];
            $attributes_weight += $values['weight'];
          }
        }

    Das ist doch dann nahezu redundant, oder?

    LG
    Jenny

    GTB

    • modified Team
    • Gravatar
    • Beiträge: 6.306
    • Geschlecht:
    Re: class shopping_cart.php, Funktion wird x-fach ausgeführt
    Antwort #5 am: 30. April 2020, 18:07:39
    Stimmt, auch da hast du Recht.
    Ich füge das mal in r12743 zusammen für Shopversion 2.0.5.2

    Danke.

    Gruss Gerhard