Contao-Camp 2024
Ergebnis 1 bis 3 von 3

Thema: Versand auf Varianten beschränken?

  1. #1
    Contao-Nutzer
    Registriert seit
    20.08.2012.
    Beiträge
    28

    Frage Versand auf Varianten beschränken?

    Hallo liebe Community

    Ich möchte für einen online-Shop (contao 3.5.40) mit isotope verschiedene
    Versandpreise je nach Anzahl Produkten und je nach Grösse des Produkts.

    Ein Beispiel:
    Im Shop gibt es verschiedene Weinflaschen und jede Flasche gibt es in 50cl oder in 75cl zu kaufen.
    Dies habe ich so in Varianten eingefügt, dass sich der Preis je nach gewählter Grösse anpasst.

    Nun gibt es jedoch auch einen unterschiedlichen Versand für die verschiedenen Flaschen:

    50cl - 6er Karton: 12.00.-
    50cl - 15er Karton: 16.50.-

    75cl - 6er Karton: 12.00.-
    75cl - 12er Karton: 16.50.-

    Gibt es eine Möglichkeit den Versand auf die Variante zu beschränken? Oder irgend eine andere Möglichkeit dies umzusetzen?

    Besten Dank für jegliche Hilfe

  2. #2
    Contao-Fan
    Registriert seit
    09.02.2011.
    Beiträge
    602

    Standard

    probier mal im Versandmodul eine Kombination nach Produkttyp und Produktpreis (Produkttyp-Bedingungen), wenn es Sinn macht

    Oder wenn das nicht geht, könntest nach fiktivem Gewicht gehen, also 6er Karton gibst 1 Kilo, 12er Karton 2 Kilo

    Oder 12er Karton-Preis inkl. Versandkostenaufschlag

    hab aber nix davon zu Ende gedacht oder getestet, vielleicht bringt es dich dennoch weiter

  3. #3
    Contao-Nutzer
    Registriert seit
    20.08.2012.
    Beiträge
    28

    HTML

    Hallo tintifax

    Besten Dank für die Antwort.
    Ich habe mich da gestern Nacht nochmals ran gemacht und mir überlegt wie ich das selbst berechnen kann.
    Die Berechnung an sich ist nicht schwer. Es gab jedoch zwei Probleme:

    1. Wie kann ich den Versandpreis manuell hinzufügen?
    Nach diversen Suchanfragen entdeckte ich die Contao Hooks*. Nachdem ich die calculatePreis() Hook erstellte,
    und erfolgreich den Gesamtpreis veränderte, zeigte sich das zweite Problem.

    2. Wie komme ich im Hook an die Daten im Warenkorb?
    In meinem eigenen Hook schaffte ich es irgendwie nicht, den Warenkorb auszugeben. Durch diverses weiteres
    Googeln fand ich dann eine Anleitung von fritzmg um
    eigene "surcharges" zu erstellen. Das gab mir neue Hoffnung und nachdem ich alle möglichen Klassen des Isotope durchforstet hatte kam
    ich zu folgendem Resultat:


    [ MySurcharge.php ]
    PHP-Code:
    <?php

    use Isotope\Model\ProductCollection;

    class 
    MySurcharge {

        public function 
    calcKartons($total$klein$gross=0) {
            if(
    $gross==0) {
                
    $gross=$klein;
                
    $klein=0;
            }
            
    $aKlein 0;
            
    $aGross 0;
            if(
    $total $gross == 0) {
                
    $aGross $total $gross;
            } else {
                
    $aGross floor($total $gross);
                if((
    $total%$gross)>$klein) {
                    
    $aGross++;
                } else {
                    
    $aKlein++;
                }
            }
            return [
    $aKlein,$aGross];
        }

        public function 
    findSurchargesForCollection(ProductCollection $collection): array {
            
    //check if "Postversand" is the selected shipping method
           
    if($collection->getShippingMethod()->name == "Postversand") { 

                
    $arrItems $collection->getItems();
                
    $anzahl_1 0;
                
    $anzahl_2 0;
                foreach (
    $arrItems as $objItem) {
                    if(
    $objItem->hasProduct()) {
                        
    $objProduct $objItem->getProduct();
                        
                        
    $quantity $objItem->quantity;
                        
    //$name = $objProduct->getName();
                        
    $groesse $objProduct->getOptions()['groesse'];
                    
                        if(
    $groesse==1) {
                        
    //75cl
                            
    $anzahl_1 += $quantity;
                        } else if(
    $groesse==2) {
                        
    //50cl
                            
    $anzahl_2 += $quantity;
                        }
                    }
                }

                
    $result75 $this->calcKartons($anzahl_1612);
                
    $result50 $this->calcKartons($anzahl_2615);
                
                
    $preis1 = ($result75[0] + $result50[0]) * 12;
                
    $preis2 = ($result75[1] + $result50[1]) * 16.5;
     
                
    $surcharge $preis1 $preis2;

                return [\
    MySurchargeModel::build($surcharge)];
            } else {
                return [];
            }
        }
    }
    [ model/MySurchchargeModel.php ]
    PHP-Code:
    <?php

    use Isotope\Interfaces\IsotopeProductCollectionSurcharge;
    use 
    Isotope\Model\ProductCollectionSurcharge;

    class 
    MySurchargeModel extends ProductCollectionSurcharge implements IsotopeProductCollectionSurcharge {

        public static function 
    build($var): self {

            
    $surcharge = new self();
            
    $surcharge->label 'Postversand';
            
    $surcharge->price '';
            
    $surcharge->total_price $var;
            
    $surcharge->tax_class 1;
            
    $surcharge->before_tax true;
            
    $surcharge->addToTotal true;

            return 
    $surcharge;
        }
    }
    [ config/config.php ]
    PHP-Code:
    <?php

    /**
     * Register Isotope model types
     */
    \Isotope\Model\ProductCollectionSurcharge::registerModelType('mysurcharge', \MySurchargeModel::class);

    /**
     * Register Isotope hooks
     */
    $GLOBALS['ISO_HOOKS']['findSurchargesForCollection'][] = [\MySurcharge::class, 'findSurchargesForCollection'];

    Ich habe keine Ahnung, ob es irgendwie anders gegangen wäre, aber so scheint es nun zu funktionieren.
    Der Vorteil ist, ich kann theoretisch auch einen String mit weiteren Informationen übergeben:
    z.B 20x 50cl Flaschen im 15er Karton | 3 x 50cl Flaschen im 6er Karton

    *Nützliches zu den Hooks:
    Contao Hooks
    Eigenen Hook einrichten
    Isotope Hooks 1
    Isotope Hooks 2
    eigener surcharge von fritzmg

    Vielleicht hilft es ja jemandem weiter.
    Geändert von sepher (06.05.2020 um 16:26 Uhr)

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •