Jump to content

[gelöst] Produktgewicht nicht addieren sondern immer das Höchste


Recommended Posts

Habe alles durchsucht , aber leider keine Lösung gefunden.

 

In meinem Shop soll, egal wieviel Artikel im Warenkorb sind, immer nur das Größte Gewicht ausgewählt werden.

Standard mäßig addiert Prestashop das Gewicht aller Artikel zu einem Gesamtgewicht und wählt dann die Versandkosten aus.

Vielleicht weiss jemand eine Lösung !

 

Prestahop 1.6.1.7

Link to comment
Share on other sites

Bei uns läuft das so ab , egal wieviel Artikel ein Kunde kauft , er zahlt nur einmal Versand - also jene Versandkategorie für das schwerste Produkt ( Jede Bestellung wird von einem Versdandunternehmen geliefert, wobei es egal ist ob 200kg oder 300 kg ect ...)

Link to comment
Share on other sites

So hab jetzt folgende Änderungen in der Classes/Cart.php vorgenommen:

Um nicht alle Produktgewichte zusammenzuzählen , sondern nur das Höchste auszuwählen ersetzt man einfach die Datenbankabfrage SELECT SUM in SELECT MAX auf Codezeile 3050 !

 

 

    public function getTotalWeight($products = null)
    {
        if (!is_null($products)) {
            $total_weight = 0;
            foreach ($products as $product) {
                if (!isset($product['weight_attribute']) || is_null($product['weight_attribute'])) {
                    $total_weight = $product['weight'] * $product['cart_quantity'];
                } else {
                    $total_weight = $product['weight_attribute'] * $product['cart_quantity'];
                }
            }
            return $total_weight;
        }

        if (!isset(self::$_totalWeight[$this->id])) {
            if (Combination::isFeatureActive()) {
                $weight_product_with_attribute = Db::getInstance()->getValue('
                SELECT MAX((p.`weight` + pa.`weight`) * cp.`quantity`) as nb
                FROM `'._DB_PREFIX_.'cart_product` cp
                LEFT JOIN `'._DB_PREFIX_.'product` p ON (cp.`id_product` = p.`id_product`)
                LEFT JOIN `'._DB_PREFIX_.'product_attribute` pa ON (cp.`id_product_attribute` = pa.`id_product_attribute`)
                WHERE (cp.`id_product_attribute` IS NOT NULL AND cp.`id_product_attribute` != 0)
                AND cp.`id_cart` = '.(int)$this->id);
            } else {
                $weight_product_with_attribute = 0;
            }

            $weight_product_without_attribute = Db::getInstance()->getValue('
            SELECT MAX(p.`weight` * cp.`quantity`) as nb
            FROM `'._DB_PREFIX_.'cart_product` cp
            LEFT JOIN `'._DB_PREFIX_.'product` p ON (cp.`id_product` = p.`id_product`)
            WHERE (cp.`id_product_attribute` IS NULL OR cp.`id_product_attribute` = 0)
            AND cp.`id_cart` = '.(int)$this->id);

            self::$_totalWeight[$this->id] = round((float)$weight_product_with_attribute + (float)$weight_product_without_attribute, 6);
        }

        return self::$_totalWeight[$this->id];
    }

 

Was allerdings nicht funktioniert, dass er auch bei größerer Stückzahl eines Produkts das Gewicht nicht addiert. Habe versucht die erste Spalte zu löschen ($total_weight = $product['weight_attribute'] * $product['cart_quantity'];) aber funzt leider nicht . Irgendwo anders muss das Gewicht noch multipliziert werden, aber ich kanns nicht finden.

Vielleicht hat ja jemand anderes eine Idee.
 

Link to comment
Share on other sites

HAHAH Ich hab den Wald vor lauter Bäumen nicht mehr gesehen.

Dies ist auch in der Datenbangabfrage zu realisieren.

 

SELECT MAX((p.`weight` + pa.`weight`) * cp.`quantity`) as nb

 

ändern in

 

SELECT MAX(p.`weight` + pa.`weight`) as nb

 

somit ist mein Problem gelöst .

Danke an ALLE

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...