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: Versandkostenfrei ab Betrag xx anzeigen

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.127
    • Geschlecht:
    Re: Versandkostenfrei ab Betrag xx anzeigen
    Antwort #15 am: 19. November 2015, 19:04:02
    Die Lösung von Gunnart umgebaut für 3 freeamount Module & Modul Versandkostenanzeige im Warenkorb mit Länderdropdown.
    (ACHTUNG! NAMENSKONVENTION BEIM KLONEN VON FREEAMOUNT BEACHTEN!)
    Funktioniert nur damit:
    MODULE_SHIPPING_FREEAMOUNT3_STATUS
    MODULE_SHIPPING_FREEAMOUNT2_STATUS
    MODULE_SHIPPING_FREEAMOUNT_STATUS

    Code: PHP  [Auswählen]
    <?php

    // -----------------------------------------------------------------------------------------
    //      FreeShippingData 4 xt:Kommääärdz / v3.04 SP2.1
    // -----------------------------------------------------------------------------------------
    //      by Gunnar Tillmann / http://www.gunnart.de
    //      v1.2c / Juni 2008
    //      Mehr Infos: http://www.gunnart.de?p=368
    // -----------------------------------------------------------------------------------------
    //      Zeigt die Grenzen bis zum versandkostenfreien Einkauf an und erzeugt Smarty-Tags
    //      fürs Template. Welche? Zum Kontrollieren mal Folgendes ins Template schreiben:
    // -----------------------------------------------------------------------------------------
    /*

            {FreeShippingData to=kontrolle}
            <pre>{php} print_r($this->_tpl_vars['kontrolle']);{/php}</pre>

    */

    // -----------------------------------------------------------------------------------------
    //      HINWEIS: Wenn "ot_shipping" und "freeamount" gleichzeitig aktiviert sind,
    //      werden die Angaben aus ot_shipping genommen.
    //      Dieses Verhalten kann in der Funktion FreeShippingType (ab Zeile 95) geändert werden.
    //      Dazu einfach die Reihenfolge ändern und gut is ...
    // -----------------------------------------------------------------------------------------
    //      Aber eigentlich ist es nicht sinnvoll, beide Varianten gleichzeitig zu aktivieren.
    //      Also besser lassen. :-)
    // -----------------------------------------------------------------------------------------



    // -----------------------------------------------------------------------------------------
    //      brauchen wir ...
    // -----------------------------------------------------------------------------------------
            if(!function_exists('xtc_get_countriesList')) {
                    require_once(DIR_FS_INC.'xtc_get_countries.inc.php');
            }
    // -----------------------------------------------------------------------------------------


    // -----------------------------------------------------------------------------------------
    //      $Zones aufräumen.
    // -----------------------------------------------------------------------------------------
            function ZoneArrayClean($Zones=array()) {
                    $return = false;
                    foreach($Zones as $Zone)
                            $return[] = trim(preg_replace("/[[:alpha:]]/",'',$Zone));
                    return $return;
            }
    // -----------------------------------------------------------------------------------------


    // -----------------------------------------------------------------------------------------
    //      Land des Shops / Land der Standard-Adresse
    // -----------------------------------------------------------------------------------------
            function StoreCountry() {
                    return xtc_get_countriesList(STORE_COUNTRY,true);
            }
    // -----------------------------------------------------------------------------------------
            function CustomersCountry() {
                    if (isset($_SESSION['customer_country_id'])) {
                            return xtc_get_countriesList($_SESSION['customer_country_id'],true);
                    }
                    return false;
            }
    // -----------------------------------------------------------------------------------------



    // -----------------------------------------------------------------------------------------
    //      Ländercode der Liefer-Adresse ermitteln, ersatzweise Standard-Adresse
    //      $_SESSION['delivery_zone'] ist nämlich erst ab dem ersten Klick auf "zur Kasse" gefüllt
    // -----------------------------------------------------------------------------------------
            function DeliveryZone($CustomersCountry) {
                    if (isset($_SESSION['country'])) {
                            $delivery_country = xtc_get_countriesList($_SESSION['country'],true); // pulldown im Warenkorb
                            return trim(preg_replace("/[^a-zA-Z]/",'',$delivery_country['countries_iso_code_2']));
                    } elseif(isset($_SESSION['delivery_zone'])) {
                            return trim(preg_replace("/[[:alpha:]]/",'',$_SESSION['delivery_zone']));
                    } elseif(is_array($CustomersCountry)) {
                            return trim(preg_replace("/[[:alpha:]]/",'',$CustomersCountry['countries_iso_code_2']));
                    }
                    return false;
            }
    // -----------------------------------------------------------------------------------------



    // -----------------------------------------------------------------------------------------
    //      "Art" der aktivierten versandkostenfreien Lieferung ermitteln
    // -----------------------------------------------------------------------------------------
    //      a) Im Admin-Bereich unter "Zusammenfassung" (ot_shipping)
    //      b) Im Admin-Bereich unter "Versandart" (freeamount)
    // -----------------------------------------------------------------------------------------
    //      Sind beide Module aktiv, hat hier ot_shipping den Vorrang. Wenn's anders sein soll,
    //      einfach die Reihenfolge der "if"-Klammern ändern. Das wirkt sich dann auf den gesamten
    //      Rest von "function.FreeShippingData.php" aus.
    // -----------------------------------------------------------------------------------------
            function FreeShippingType() {
                    $DeliveryZone= DeliveryZone(CustomersCountry());
                    if(strtolower(MODULE_SHIPPING_FREEAMOUNT3_STATUS)=='true') {
                            $Zones = trim(MODULE_SHIPPING_FREEAMOUNT3_ALLOWED);
                            if(empty($Zones) || !$DeliveryZone) {
                                    //something wrong
                            } else {
                                    $Zones = explode(',',$Zones);
                                    ZoneArrayClean($Zones);
                                    if(in_array($DeliveryZone,$Zones)) {
                                            return 'freeamount3';
                                    }
                            }
                    }
                    if(strtolower(MODULE_SHIPPING_FREEAMOUNT2_STATUS)=='true') {
                            $Zones = trim(MODULE_SHIPPING_FREEAMOUNT2_ALLOWED);
                            if(empty($Zones) || !$DeliveryZone) {
                                    //something wrong
                            } else {
                                    $Zones = explode(',',$Zones);
                                    ZoneArrayClean($Zones);
                                    if(in_array($DeliveryZone,$Zones)) {
                                            return 'freeamount2';
                                    }
                            }
                    }
                    if(strtolower(MODULE_SHIPPING_FREEAMOUNT_STATUS)=='true') {
                            return 'freeamount';
                    }
                    if(strtolower(MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING)=='true') {
                            return 'ot_shipping';
                    }
                    return false;
            }
    // -----------------------------------------------------------------------------------------



    // -----------------------------------------------------------------------------------------
    //      Prüfen, ob versandkostenfreie Lieferung generell erlaubt ist
    // -----------------------------------------------------------------------------------------
            function FreeShippingAllowed($Type=false,$CustomersCountry,$StoreCountry,$DeliveryZone) {      
            // -------------------------------------------------------------------------------------
                    if($Type=='ot_shipping') {
                            if(!$DeliveryZone || MODULE_ORDER_TOTAL_SHIPPING_DESTINATION=='both') {
                                    return true;
                            } else {
                                    if(MODULE_ORDER_TOTAL_SHIPPING_DESTINATION=='national' && $DeliveryZone==$StoreCountry['countries_iso_code_2']) {
                                            return true;
                                    } elseif(MODULE_ORDER_TOTAL_SHIPPING_DESTINATION=='international' && $DeliveryZone!=$StoreCountry['countries_iso_code_2']) {
                                            return true;
                                    }
                            }
                            return false;
                    }
            // -------------------------------------------------------------------------------------
                    if($Type=='freeamount') {
                            $Zones = trim(MODULE_SHIPPING_FREEAMOUNT_ALLOWED);
                            if(empty($Zones) || !$DeliveryZone) {
                                    return true;
                            } else {
                                    // Zonen nur mit Komma trennen,
                                    // Versehentliche Leerzeichen etc. können mit ZoneArrayClean abgefangen
                                    // werden. Ist aber erstmal auskommentiert ...
                                    // Also Leute, lieber büschn aufpassen bei der Dateneingabe :-)
                                    $Zones = explode(',',$Zones);
                                    ZoneArrayClean($Zones);
                                    if(in_array($DeliveryZone,$Zones)) {
                                            return true;
                                    }
                            }
                    }
                    if($Type=='freeamount2') {
                            $Zones = trim(MODULE_SHIPPING_FREEAMOUNT2_ALLOWED);
                            if(empty($Zones) || !$DeliveryZone) {
                                    return true;
                            } else {
                                    // Zonen nur mit Komma trennen,
                                    // Versehentliche Leerzeichen etc. können mit ZoneArrayClean abgefangen
                                    // werden. Ist aber erstmal auskommentiert ...
                                    // Also Leute, lieber büschn aufpassen bei der Dateneingabe :-)
                                    $Zones = explode(',',$Zones);
                                    ZoneArrayClean($Zones);
                                    if(in_array($DeliveryZone,$Zones)) {
                                            return true;
                                    }
                            }
                    }
                    if($Type=='freeamount3') {
                            $Zones = trim(MODULE_SHIPPING_FREEAMOUNT3_ALLOWED);
                            if(empty($Zones) || !$DeliveryZone) {
                                    return true;
                            } else {
                                    // Zonen nur mit Komma trennen,
                                    // Versehentliche Leerzeichen etc. können mit ZoneArrayClean abgefangen
                                    // werden. Ist aber erstmal auskommentiert ...
                                    // Also Leute, lieber büschn aufpassen bei der Dateneingabe :-)
                                    $Zones = explode(',',$Zones);
                                    ZoneArrayClean($Zones);
                                    if(in_array($DeliveryZone,$Zones)) {
                                            return true;
                                    }
                            }
                    }
            // -------------------------------------------------------------------------------------
                    return false;
            }
    // -----------------------------------------------------------------------------------------



    // -----------------------------------------------------------------------------------------
    //      Versandkostenfrei-Grenze ermitteln
    // -----------------------------------------------------------------------------------------
            function FreeShipping($Type=false) {
                    // preg_replace - Falls weitere Buchstaben außer dem Zahlenwert mit reingerutscht sind.
                    if($Type=='ot_shipping') {
                            return preg_replace("/[^0-9|.]/", '', MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING_OVER);
                    }
                    if($Type=='freeamount') {
                            return preg_replace("/[^0-9|.]/", '', MODULE_SHIPPING_FREEAMOUNT_AMOUNT);
                    }
                    if($Type=='freeamount2') {
                            return preg_replace("/[^0-9|.]/", '', MODULE_SHIPPING_FREEAMOUNT2_AMOUNT);
                    }
                    if($Type=='freeamount3') {
                            return preg_replace("/[^0-9|.]/", '', MODULE_SHIPPING_FREEAMOUNT3_AMOUNT);
                    }
                    return false;  
            }
    // -----------------------------------------------------------------------------------------



    // -----------------------------------------------------------------------------------------
    //      Smarty-Tags basteln
    // -----------------------------------------------------------------------------------------
            function FreeShippingData() {
           
                    global $xtPrice;
           
                    $CartContent = get_object_vars($_SESSION['cart']);
                   
                    $Data['CUSTOMERS_COUNTRY']                              = CustomersCountry();
                    $Data['STORE_COUNTRY']                                  = StoreCountry();
                    $Data['DELIVERY_ZONE']                                  = DeliveryZone($Data['CUSTOMERS_COUNTRY']);
           
                    $Data['CART_BRUTTO_VAL']                                = $CartContent['total'];
                    $Data['CART_BRUTTO']                                    = $xtPrice->xtcFormat($Data['CART_BRUTTO_VAL'],true,0,true);
                    $Data['CART_NETTO_VAL']                                 = $CartContent['total']-$_SESSION['cart']->show_tax(false);
                    $Data['CART_NETTO']                                             = $xtPrice->xtcFormat($Data['CART_NETTO_VAL'],true,0,true);
                   
                    $Data['FREE_SHIPPING_TYPE']                             = FreeShippingType();
                   
                    if($Data['FREE_SHIPPING_TYPE']) {

                            $Data['FREE_SHIPPING_ALLOWED']          = FreeShippingAllowed($Data['FREE_SHIPPING_TYPE'],$Data['CUSTOMERS_COUNTRY'],$Data['STORE_COUNTRY'],$Data['DELIVERY_ZONE']);
                            $Data['FREE_SHIPPING_VAL']                      = FreeShipping($Data['FREE_SHIPPING_TYPE']);
                            $Data['FREE_SHIPPING']                          = $xtPrice->xtcFormat($Data['FREE_SHIPPING_VAL'],true,0,true);

                    } else {

                            $Data['FREE_SHIPPING_ALLOWED']          = false;
                            $Data['FREE_SHIPPING_VAL']                      = false;
                            $Data['FREE_SHIPPING']                          = false;

                    }
                   
                    if($Data['FREE_SHIPPING_ALLOWED']) {
                   
                            // HINWEISE:
                            // -->  ot_shipping ermittelt für "steuerfreie" Kunden die Grenze ab Nettowert,
                            //              für "steuerpflichtige" Kunden die Grenze ab Bruttowert.
                            // -->  freeamount nimmt für alle Kundengruppen den Bruttowert als Grundlage
                           
                            if($Data['FREE_SHIPPING_TYPE']=='ot_shipping') {
                                    if($_SESSION['customers_status']['customers_status_show_price_tax']==1) {
                                            $Missing = $Data['FREE_SHIPPING_VAL']-$Data['CART_BRUTTO_VAL'];
                                            $Data['FREE_SHIPPING_TAX']      = true;
                                    } elseif($_SESSION['customers_status']['customers_status_show_price_tax']==0) {
                                            $Missing = $Data['FREE_SHIPPING_VAL']-$Data['CART_NETTO_VAL'];
                                            $Data['FREE_SHIPPING_TAX']      = false;
                                    }
                            }
                            if($Data['FREE_SHIPPING_TYPE']=='freeamount') {
                                    $Missing = $Data['FREE_SHIPPING_VAL']-$Data['CART_BRUTTO_VAL'];
                                    $Data['FREE_SHIPPING_TAX']              = true;
                            }

                            if($Data['FREE_SHIPPING_TYPE']=='freeamount2') {
                                    $Missing = $Data['FREE_SHIPPING_VAL']-$Data['CART_BRUTTO_VAL'];
                                    $Data['FREE_SHIPPING_TAX']              = true;
                            }

                            if($Data['FREE_SHIPPING_TYPE']=='freeamount3') {
                                    $Missing = $Data['FREE_SHIPPING_VAL']-$Data['CART_BRUTTO_VAL'];
                                    $Data['FREE_SHIPPING_TAX']              = true;
                            }

                            if($Missing < 0) {
                                    $Missing = 0; // Wenn kleiner Null, fehlt nix mehr ...
                            }
                           
                            $Data['FREE_SHIPPING_MISSING_VAL']      = $Missing;
                            $Data['FREE_SHIPPING_MISSING']          = $xtPrice->xtcFormat($Missing,true,0,true);
           
                    } else {
           
                            $Data['FREE_SHIPPING_MISSING_VAL']      = false;
                            $Data['FREE_SHIPPING_MISSING']          = false;
                            $Data['FREE_SHIPPING_TAX']                      = false;
           
                    }
                   
                    // Soll "fehlt noch"-Text gezeigt werden?
                    if($Data['CART_BRUTTO_VAL'] > 0 && $Data['FREE_SHIPPING_ALLOWED'] && $Data['FREE_SHIPPING_MISSING_VAL'] > 0) {
                            $Data['SHOW_FREE_SHIPPING_MISSING']     = true;
                    } else {
                            $Data['SHOW_FREE_SHIPPING_MISSING']     = false;
                    }
                   
                    // Ist der Versand versandkostenfrei?
                    if($Data['FREE_SHIPPING_ALLOWED'] && $Data['FREE_SHIPPING_MISSING_VAL'] == 0) {
                            $Data['SHOW_FREE_SHIPPING_TRUE']        = true;
                    } else {
                            $Data['SHOW_FREE_SHIPPING_TRUE']        = false;
                    }
                           
                    return $Data; // <-- Data-dadaaa! ((Los! Fanfare dabei vorstellen!))
            }
    // -----------------------------------------------------------------------------------------



    // -----------------------------------------------------------------------------------------
    //      Smarty-Hauptfunktion / Ausgabe ans Template
    // -----------------------------------------------------------------------------------------
            function smarty_function_FreeShippingData($Params=array(), &$smarty) {
           
                    $FreeShippingData = FreeShippingData();
                   
                    //echo '<pre>'; print_r($FreeShippingData); echo '</pre>'; // <-- Kontroll-Ausgabe
           
                    $to = trim($Params['to']);

                    if(!empty($to)) {
                            $smarty->clear_assign($to);  
                            $smarty->assign($to,$FreeShippingData);
                    } else {
                            $smarty->assign($FreeShippingData);
                    }

            }
    // -----------------------------------------------------------------------------------------

    ?>
    Managed Server

    toppi

    • Viel Schreiber
    • Beiträge: 651
    Re: Versandkostenfrei ab Betrag xx anzeigen
    Antwort #16 am: 24. Februar 2016, 19:37:52
    @Bonsai

    Das ist etwas, was ich auch suche.

    Kurze Frage nur dazu:
    An welcher Stelle,  muss ich diesen Code einfügen?

    Gruß
    toppi

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.127
    • Geschlecht:
    Re: Versandkostenfrei ab Betrag xx anzeigen
    Antwort #17 am: 25. Februar 2016, 11:28:12

    toppi

    • Viel Schreiber
    • Beiträge: 651
    Re: Versandkostenfrei ab Betrag xx anzeigen
    Antwort #18 am: 25. Februar 2016, 15:06:26
    Sorry, wenn ich nun hier nachhake, aber ich bin leider kein so php-Experte:

    Dort steht:
    Smarty Function {FreeShippingData}
    » Downloaden, entpacken und im Smarty-Ordner Ihres Templates abspeichern.

    Diese Datei habe ich heruntergeladen:
    function.FreeShippingData.php

    Ich habe nur "freeamount" im Einsatz.
    Kann mir hier jemand behilflich sein?

    Gruß
    toppi

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.127
    • Geschlecht:
    Re: Versandkostenfrei ab Betrag xx anzeigen
    Antwort #19 am: 25. Februar 2016, 18:28:53
    in Deinem Templateordner ist ein Ordner smarty

    /templates/xtc5/smarty bzw.
    /templates/<Name Deines verwendeten Templates>/smarty

    Da muss die Datei rein.

    Dann mach mal GENAU das was gunnart im Absatz "Noch mehr Smarty: " schreibt. Dann sollte was passieren. Wenn Dir das dann nicht ganz gefällt oder irgendwelche Fehler wirft, helfe ich gerne beim Umbau.

    toppi

    • Viel Schreiber
    • Beiträge: 651
    Re: Versandkostenfrei ab Betrag xx anzeigen
    Antwort #20 am: 25. Februar 2016, 19:09:17
    @Bonsai

    Gut erklärt:-)

    Habe die Datei eingefügt und
    auch was dort unter "Noch mehr Smartys" stand.

    Hatte zunächst eine weiße Seite, dies hat sich aber erledigt.
    Hier habe ich bei Gunnart noch die "function.show.php" dazu gefunden und dann auch
    in den "Smarty-Ordner" eingefügt.

    Im Index im Footer-Bereich steht dort dann nun: Versandkostenfrei ab .. EUR Warenwert

    Allerdings im Warenkorb steht nichts weiter dazu.

    Die Ansicht zum Warenkorb ist im Browser unter:
    ...shopping_cart.php

    Muss ich evtl. an anderer Stelle etwas einfügen?

    Wäre nett, wenn du mir sagen könntest, was das Problem ist.

    Gruß
    toppi

    toppi

    • Viel Schreiber
    • Beiträge: 651
    Re: Versandkostenfrei ab Betrag xx anzeigen
    Antwort #21 am: 25. Februar 2016, 20:07:26
    @Bonsai

    Ich sage nochmals herzlichen Dank für die verständliche Erklärung. :thumbs:

    Es klappt nun alles, siehe mein Screen im Anhang.

    Gruß
    toppi

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.127
    • Geschlecht:
    Re: Versandkostenfrei ab Betrag xx anzeigen
    Antwort #22 am: 26. Februar 2016, 12:03:16
    Super! Freut mich, dass es geklappt hat! Wollte gerade helfen kommen :-D

    mannoo

    • Frisch an Board
    • Beiträge: 76
    • Geschlecht:
    Re: Versandkostenfrei ab Betrag xx anzeigen
    Antwort #23 am: 16. November 2016, 11:38:40
    Hallo,

    ich habe seit geraumer Zeit die Smarty von Gunnart eingebaut, hat auch einwandfrei Funktioniert.

    Von hier entnommen:  http://www.gunnart.de/tipps-und-tricks/xtcommerce/lieferung-versandkostenfrei-freeshippingdata-fuer-xtcommerce/

    Allerdings ist mir heute Morgen aufgefallen, dass im meinen Modified 2.0, Domain http://natursalz.kaufen das freeamount Modul nicht ordnungsgemäß funktioniert oder etwas Falsch konfiguriert sein muss. Vermutlich wird der eingegeben Betrag nicht übernommen, auch wenn der Warenkorb unter dem Mindestbetrag ist wird immer der Text: Lieferung für Sie nach AT, DE versandkostenfrei angezeigt.

    Jedoch wenn ich statt dem Versandmodul, ot_shipping Aktiviere funktioniert auch die Anzeige von Gunnart im Warenkorb: Ihnen fehlen noch X EUR bis zur versandkostenfreien Lieferung nach…

    Ich habe auch das Modul bereits Dupliziert, wie vermutet hat das auch nicht gebracht.

    Noch etwas ist mir Aufgefallen, auch in der checkout_shipping.php wir bei einen Betrag der unter dem Mindestbetrag liegt das Modul Versandkostenfrei angezeigt, ist allerdings nicht Wählbar!

    Eventuell hat jemand einen Lösungsvorschlag für mein Problem?
    Managed Server