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: hinweis "noch xxx euro bis versandkostenfreie lieferung"

    satriani

    • Mitglied
    • Beiträge: 186
    hallo,

    gibt es eine möglichkeit dem kunden im warenkorb oder beim bestellvorgang anzuzeigen, dass noch soundsoviel euro bis zu einer versandkostenfreien lieferung fehlen?

    sehe das immer öfter in anderen shops.

    lg

    satriani

    Linkback: https://www.modified-shop.org/forum/index.php?topic=34347.0
    Trade Republic - Provisionsfrei Aktien handeln

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.127
    • Geschlecht:
    Re: hinweis "noch xxx euro bis versandkostenfreie lieferung"
    Antwort #1 am: 12. Februar 2016, 12:45:37
    Ja, schau bei mir im Shop .... es gibt auch Hinweise im Forum zu finden wie das geht .... Meine Lösung hilft Dir wenig, wenn Du ein anderes Template hast.

    Edit: da ist es dabei:
    http://lmgtfy.com/?q=modifed+shop+warenkorb+anzeige+noch+bis+versandkostenfrei

    cplasa

    • Fördermitglied
    • Beiträge: 200
    • Geschlecht:
    Re: hinweis "noch xxx euro bis versandkostenfreie lieferung"
    Antwort #2 am: 12. Februar 2016, 14:35:49
    Hier eine Lösung auf die Schnelle.

    Habe hier auf die Auslagerung in die Sprachdatei verzichtet - kann bei Bedarf ja selbst angepasst werden.

    Diese Lösung bezieht sich auf die Cartbox im Template.

    Die Versandkostengrenze ist Hardcoded kann bei Befarf ja auch auf freeamount verweisen.

    Suche in
    templates/yourtemplate/source/boxes/shopping_cart.php

    Code: PHP  [Auswählen]
     $box_smarty->assign('products', $products_in_cart);

    Füge darüber ein:

    Code: PHP  [Auswählen]
      $versandkostengrenze = 100;
      $versandkostenfrei = $total - $versandkostengrenze;
      if ( $total>$versandkostengrenze)  $versandkostenfrei=0;  
      if ( $versandkostenfrei<0)  $versandkostenfrei=$versandkostenfrei*-1;  
      $box_smarty->assign('versandkostenfrei', $versandkostenfrei);

    Suche in
    templates/yourtemplate/boxes/box_cart.html

    Code: PHP  [Auswählen]
    {if $SHIPPING_INFO}{$SHIPPING_INFO}{/if}

    Ersetze mit

    Code: PHP  [Auswählen]
    {if $versandkostenfrei!=$total}
    {if $SHIPPING_INFO}{$SHIPPING_INFO}<br>{/if}
    Noch {$versandkostenfrei} EUR bis zur kostenfreien Lieferung
    {else}
    Kostenfreie Lieferung
    {/if}

    Viele Grüße
    Christian

    satriani

    • Mitglied
    • Beiträge: 186
    Re: hinweis "noch xxx euro bis versandkostenfreie lieferung"
    Antwort #3 am: 12. Februar 2016, 14:43:56
    danke cdplasa,

    werde ich gleich mal testen.

    lg

    satriani

    cplasa

    • Fördermitglied
    • Beiträge: 200
    • Geschlecht:
    Re: hinweis "noch xxx euro bis versandkostenfreie lieferung"
    Antwort #4 am: 12. Februar 2016, 15:01:12
    Hier noch eine verbesserte Version. Dezimalstellen werden auf zwei Stellen ausgeweitet und Punkt wird durch Komma ersetzt

    aus
    Noch 85.8 EUR bis zur kostenfreien Lieferung

    wird dann
    Noch 85,80 EUR bis zur kostenfreien Lieferung

    Code: PHP  [Auswählen]
    {if $versandkostenfrei!=$total}
    {if $SHIPPING_INFO}{$SHIPPING_INFO}<br>{/if}
    Noch {$versandkostenfrei|string_format:"%.2f"|replace:'.':','} EUR bis zur kostenfreien Lieferung*
    {else}
    Kostenfreie Lieferung*
    {/if}

    So siehts dann bei mir aus (siehe Anhang)

    Das Sternchen jeweils hinten verweist auf die Erläuterung im Footer - Versandkostenfrei ab 100 EUR nur in Deutschland. Bis dahin hat der Kunde ja noch kein Land ausgewählt

    cplasa

    • Fördermitglied
    • Beiträge: 200
    • Geschlecht:
    Re: hinweis "noch xxx euro bis versandkostenfreie lieferung"
    Antwort #5 am: 12. Februar 2016, 15:08:14
    ...vielleicht kann/will das noch jemand mit freeamount verknüpfen? Komme da leider nicht weiter.

    Dann wäre das tatsächlich auch brauchbar!?

    Gruß
    Christian

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.127
    • Geschlecht:
    Re: hinweis "noch xxx euro bis versandkostenfreie lieferung"
    Antwort #6 am: 12. Februar 2016, 16:25:19
    Habs gefunden.
    http://www.gunnart.de/tipps-und-tricks/xtcommerce/lieferung-versandkostenfrei-freeshippingdata-fuer-xtcommerce/

    einfach die function.FreeShippingData.php in den smarty Ordner des Templates packen, das ganze auf die eigenen Module anpassen, z.B. so
    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);
                    }

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

    ?>

    und man hat im Template alles zur Verfügung.

    cplasa

    • Fördermitglied
    • Beiträge: 200
    • Geschlecht:
    Re: hinweis "noch xxx euro bis versandkostenfreie lieferung"
    Antwort #7 am: 12. Februar 2016, 16:43:16
    ..das ist ja noch besser

     :thx: :pro:

    satriani

    • Mitglied
    • Beiträge: 186
    Re: hinweis "noch xxx euro bis versandkostenfreie lieferung"
    Antwort #8 am: 12. Februar 2016, 16:45:48
    danke euch,

    ihr seid super hilfsbereit.

    ich wünsche euch ein schönes, erholsamen wochenende

    lg

    satriani

    cplasa

    • Fördermitglied
    • Beiträge: 200
    • Geschlecht:
    Re: hinweis "noch xxx euro bis versandkostenfreie lieferung"
    Antwort #9 am: 12. Februar 2016, 16:49:45
    Gleichfalls :-)

    ...der Feierabend ruft  :cheers:
    6 Antworten
    6575 Aufrufe
    13. März 2014, 14:01:10 von eklis
    24 Antworten
    10805 Aufrufe
    28. Dezember 2016, 02:23:21 von md_kks
               
    anything