Jump to content

Versandkosten bei mobile Ansicht anders


Recommended Posts

Ich habe ein Problem und komme einfach nicht drauf.

Im normalen Shop, also desktop version , werden mir die Versandkosten richtig angezeigt.
In der mobile Ansicht habe ich bei der warenkorb zusammenfassung nur 7 € versand , also die niedrigsten versandkosten.

Allerdings werden dann im bestellprozess bei versand wieder die richtigen versandkosten angezeigt.

 

Als würde die mobile ansicht den warenkorb anders berechnen.

 

Habe keine eigene mobile seite sondern responsive .

 

Vielleicht kann mir da jemand weiterhelfen.

 

 

Link to comment
Share on other sites

Klingt für mich (ohne Link und ohne Screenshot) so als wär es ein Anzeigefehler.

Wenn am Ende trotzdem richtig berechnet wird scheint es mir so als wenn das Responsive den Checkout nicht richtig darstellt.

Link to comment
Share on other sites

als würde bei der responsive Ansicht die Cart Regeln neu berechnet - hab nämlich die original cart.php so umgeschrieben, dass egal wieviel Produkte im Warenkorb LIEGEN er immer nur das schwerste paket / Produkt berechnet.

 

Wird für die mobile bzw responsive Ansicht eine andere Datei als cart.php zum berechnen herbeigezogen?

Edited by pwerginz (see edit history)
Link to comment
Share on other sites

Welche Presta Version und Theme hast du denn?

Also in der Regel wird beim Responsive die selbe Datei verwendet aber per CSS wird die Ansicht angepasst.

Bei einer bestimmten Bildschirmbreite werden dann z.B. unwichtige Elemente ausgeblendet oder statt nebeneinander, untereinander gepackt.

Link to comment
Share on other sites

Ich glaube da pfuscht ein modul mitrein - hab bei mobile version ein eigenes menümodul mit warenkorb und suchoption - es scheint so als würde das modul nicht den wert der versandkosten übergeben sondern vorher nochmals neu berechnen.

Hab dem entwickler geschrieben und warte noch auf antwort - melde mich dann

Link to comment
Share on other sites

sooo das mit den versandkosten macht mich noch irre -

​Jetzt funzt das auf der desktop version auch nicht mehr seit heute ..

​wenn ich mich einlogge, dann werden mir alle Versandkosten richtig berechnet und dargestellt.

Bin ich nicht eingeloggt , so zeigt er mir immer nur die niedrigsten Versandkosten ! (er sollte 149 € berechnen, zeigt aber nur 7,99 an)

 

check nicht was das mit einloggen zu tun hat ....

Link to comment
Share on other sites

Ist es irgendeine Warenkorbregel oder Katalogregel die nur auf bestimmte Kundengruppen greift?

Was macht dein eigen Änderung denn genau? Und was passiert wenn du das erwähnte Modul deaktivierst?

UND was hast du zu heute geändert?

Link to comment
Share on other sites

also wie werden bei mir die versandkosten berechnet:

​Es wird nicht das gewicht von jeden artikel zusammengezählt , sondern der schwerste artikel wird ausgelesen und anhand dessen die versandkosten berechnet.

 

Z.B

 

Artikel A = 5kg / 7.99 €

Artikel B = 100kg / 149€

 

nun ist das Gesamtgewicht nicht 105 kg sondern 100kg

 

das komische ist , bin ich eingeloggt alles korreckt. Bin ich nicht eingeloggt , passt es nicht, allerdings nicht bei jedem Artikel .

 

https://www.jan-trading.at/2-saeulen-hebebuehne-32t-mit-automatischer-entriegelung   --> funzt nicht müssten 149 € versand sein ist aber 7.99€.

 

https://www.jan-trading.at/1-saeulen-hebebuehne-25t-mit-automatischer-entriegelung  --> Versandkosten korrekt 199€

 

komisch ist, dass egal welcher Artikel im Warenkorb ist , am ende des checkouts stimmen die Versandkosten immer .

Link to comment
Share on other sites

Aber sagtest du nicht das ein Modul eingriff in den Warenkorb hat? Spielt das jetzt evtl. "verrückt" weil du daran etwas geändert hast oder es mal deaktiviert und wieder aktiviert hast?

Oder ist deine Änderung an einer falschen Stelle gemacht? Das die Änderung nur greift wenn jemand eingeloggt ist?

Link to comment
Share on other sites

Folgendes wurde in der cart.php verändert ....

 

Original Code:
 
   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 SUM((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 SUM(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];
    }
 
Veränderter Code:
 
 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'])) {
                        if ($total_weight <= $product['weight']){
                    $total_weight = $product['weight'];}
else{ $total_weight = $total_weight;}
                } else { if ($total_weight <= $product['weight_attribute']){
                    $total_weight = $product['weight_attribute'];}
     else{$total_weight = $total_weight;}
                }
            }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`) 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`) 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];
    }
Link to comment
Share on other sites

Was du schreibst, sagt mir, dass der Gast/Besucher keine korrekten Versandkosten gezeigt bekommt, also muss auch da der Hase im Pfeffer liegen. Wenn es im Checkout stimmt, ist der User ja eingeloggt, also wird da irgendwas verbogen.

 

Da der presta (hast du nun eigentlich irgendwo die Version erwähnt?) an ein paar Ecken eingestellt werden muss, um korrekte Versandkosten zu zeigen (eigene leidvolle Erfahrung), würde ich erstmal da alles checken, bevor ich an den Code ranginge. Eventuell wird der Gast gar nicht als "Österreicher" angesehen.....

Link to comment
Share on other sites

ok ich glaube ich weiss wo der Hund begraben liegt. Und zwar passen alle Produkte bei denen ein Attribute bzw. variante hinterlegt ist. alle anderen sind Versandkosten 7,99 also die geringsten.

 

ich glaube ich habe die ersten zeilen flasch umprogrammiert.

 

Original:
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;
        }

 

Verändert:

                                              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'])) {
                        if ($total_weight <= $product['weight']){
                    $total_weight = $product['weight'];}
else{ $total_weight = $total_weight;}
                } else { if ($total_weight <= $product['weight_attribute']){
                    $total_weight = $product['weight'];}
     else{$total_weight = $total_weight;}
                }
            }return $total_weight;

 

 

Bin leider kein PHP Profi deshalb kann ich nicht sagen ob ich das richtig umgeschrieben habe! nochmal zur Erklärung:

 

Egal wieviel Produkte im Warenkorb sind und auch egal wieviel die Quantität der einzelnen Artikel sind - es soll nur der schwerste Artikel gefiltert werden und anhand desse die Versandkosten berechnet werden.

Link to comment
Share on other sites

@Claudiocool   --> Prestahsop 1.6.7   --> hatte ich auch vermutet , allerdings wie gesagt bei den Produkten wo ich varianten dabei habe funktioniert es komischer weise ganz normal auch wenn ich nicht eingeloggt bin ..... deshalb meine Vermutung , dass ich die Berechnung falsch gemacht habe. da in der if schleife ja auch mit den Produkt Attribute Gewicht berechnet wird.

Link to comment
Share on other sites

hab jetzt nochmals alles durchgetestet:

 

Bei Produkten mit Varianten werden die Versandkosten richtig berechnet auch wenn man nicht eingeloggt ist.

Bei allen anderen Produkten, sprich wo keine varianten vorhanden sind, werden die geringsten Versandkosten angezeigt ausser ich log mich ein , dann stimmen die Versandkosten wieder .

 

VERY STRANGE ....

 

keine Ahnung wo und wie ich da noch nachschaun soll

Link to comment
Share on other sites

ok es liegt an der Berechnung - Hab jetzt den originalcode drüberkopiert und nun zeigt er wieder korreckt an !

​Kann mir jemand den Code so umschreiben, dass oben erklärte Versandberechnung stattfindet?

​Originalcode:

 

 

    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 SUM((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 SUM(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];
    }
Link to comment
Share on other sites

Ja wenn es eine möglichkeit gibt die versandkosten so einzustellen , dass er nur den schwersten artikel für die versandkostenberechnung nimnt dann muss man nicht den code umschreiben - habe diesbezüglich aber nix gefunden .

Link to comment
Share on other sites

Verstehe wie du meinst - aber ich finde das keine saubere Lösung -

​Ich habe gestern noch etwas probiert und siehe da es funktioniert wieder .... Ich hab das jetzt einfacher umgeschrieben und alles läuft wieder einwandfrei und korrekt .
 

 

 public function getTotalWeight($products = null)
        {
       if (!is_null($products)) {
         
            $total_weight = 0;
            foreach ($products as $product) {
               
                        if ($total_weight <= $product['weight']){
                    $total_weight = $product['weight'];}
else{ $total_weight = $total_weight;}
               
            }return $total_weight;
        
          
        }
if (!isset(self::$_totalWeight[$this->id])) {
            if (Combination::isFeatureActive()) {
                $weight_product_with_attribute = Db::getInstance()->getValue('
    SELECT MAX(p.`weight`) 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`) 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];
    }
 
 
Warum dies abhängig vom einloggen war kann ich nicht nachvollziehen .....
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...