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: Modul Versandkosten anpassen: für lokale PLZ gratis

    modifnick

    • Fördermitglied
    • Beiträge: 79
    • Geschlecht:
    Hallo zusammen,

    ich möchte gerne den regionalen Kunden, die sich mit PLZ identifizieren, das Angebot der kostenlosen Lieferung unterbreiten.

    Könnte man evtl das Versandmodul "item" nehmen und für eine Liste mit PLZ (z.B. alle Berliner, alle Münchner oder so) diese Versandart "Kostenlose Lieferung" anbieten? Für alle anderen Kunden wäre diese Versandart nicht verfügbar.

    Freue mich auf Vorschläge, da ich bisher keine Lösung oder Modul im Forum gefunden habe.

    Beste Grüße
    modifnick

    Linkback: https://www.modified-shop.org/forum/index.php?topic=27352.0

    Marcus Kreusch

    • Fördermitglied
    • Beiträge: 312
    • Geschlecht:
    Re: Modul Versandkosten anpassen: für lokale PLZ gratis
    Antwort #1 am: 19. August 2013, 09:55:00
    Hallo modifnick,

    leichter bis sehr leicht wäre es meiner Meinung nach, das Versandmodul zu modifizieren, das du regulär verwendest... und da halt bei der Berechnung der Kosten eine Überprüfung der shipping-PLZ zwischenzuschalten... Die kostenlosen PLZen könnten dann direkt im Code stehen oder über eine kommagetrennte Liste bei "Konfiguration" > "Versandoptionen" verwaltet werden.

    Brauchst du Hilfe dabei?

    Viele Grüße
    Marcus

    modifnick

    • Fördermitglied
    • Beiträge: 79
    • Geschlecht:
    Re: Modul Versandkosten anpassen: für lokale PLZ gratis
    Antwort #2 am: 19. August 2013, 17:14:27
    Hallo Marcus,

    danke für Deine Antwort. Speziell weil ich bei meiner Suche vorher gesehen hatte das vor Jahren eine ähnliche Frage ohne Antwort geblieben ist... Klingt gut, vor allem das es nicht allzu schwer sein sollte...

    Da ich aufgrund von ganz attraktiven Konditionen bei UPS gelandet bin hab ich mir mal die ups.php angeschaut.
    Bisher habe ich nur die Idee, mal sehen wie die in php "übersetzt" werden kann. Der Kunde muss sich erst registrieren, denn sonst gibt es keine PLZ, die wir prüfen können. Eine Liste, die ich in einer Konfigurations-Datei anpassen kann, reicht völlig. Hilfe wäre super, denn so umsetzen kann ich (noch) nicht alleine  :-?

    Gerne auch per PM, das Resultat würde ich dann hier teilen, für alle, die ähnliche Inspiration benötigen.

    LG modifnick

    Marcus Kreusch

    • Fördermitglied
    • Beiträge: 312
    • Geschlecht:
    Re: Modul Versandkosten anpassen: für lokale PLZ gratis
    Antwort #3 am: 19. August 2013, 17:36:21
    Hallo modifnick,

    probier mal das in /includes/modules/ups.php:

    finde:
    Code: PHP  [Auswählen]
    if ($freeship == true) {

    und ersetze mit
    Code: PHP  [Auswählen]
    if( $order->delivery['country']['iso_code_2'] == 'DE' && in_array($order->delivery['postcode'], array('99999', '99900'))){
                $this->quotes = array('id' => $this->code,
                            'module' => MODULE_SHIPPING_UPS_TEXT_TITLE,
                            'methods' => array(array('id' => $this->code,
                            'title' => $shipping_method . ' (' . $shipping_num_boxes . ' x ' . $shipping_weight . ' ' . MODULE_SHIPPING_UPS_TEXT_UNITS .')<br />' . 'Versandkostenfrei wegen PLZ',
                            'cost' => 0)));
            }elseif ($freeship == true) {

    Siehst du, was da passiert?
    Wenn nicht, kann ich dir gern ein wenig erklären, was passiert und wie du es für dich anpassen kannst :-)

    Viele Grüße
    Marcus

    modifnick

    • Fördermitglied
    • Beiträge: 79
    • Geschlecht:
    Re: Modul Versandkosten anpassen: für lokale PLZ gratis
    Antwort #4 am: 19. August 2013, 18:33:12
    Hallo Marcus,

    ich bin begeistert, vielen Dank für die schnelle Reaktion  :-) Lesen und verstehen, was passiert, geht bei mir gut. Nur von der Idee zum Code hab ich meine Probleme...

    In das Array habe ich alle Münchner PLZs (125) eingetragen und nun den Warenkorb aktualisiert (mit einer PLZ aus der Liste eingelogged). Der Warenkorb hat weiterhin die Versandkosten für UPS ausgewiesen (4,84€), wenn ich dann "zur Kasse" gehe korrigiert er diesen Betrag in 0,00€ mit dem Hinweis "Versandkostenfrei wegen PLZ". Gehe ich zurück und schaue mir den Warenkorb an, zeigt auch er nun diesen Betrag 0,00€ an, klicke ich auf aktualisieren, so ermittelt er wieder die 4,84€ Deutschland bis 32kg.

    Hat Du eine Idee, wohin ich die Abfrage verschieben kann, das es bereits im Warenkorb mit 0,00€ steht, sofern der Kunde eingelogged ist?

    Herzlichen Dank und beste Grüße
    modifnick

    martin-schulz1

    • Fördermitglied
    • Beiträge: 353
    • Geschlecht:
    Re: Modul Versandkosten anpassen: für lokale PLZ gratis
    Antwort #5 am: 19. August 2013, 18:37:39
    Hört sich Interessant an und wie schaut es in der Praxis aus hat jemand einen Screenshot ?

    modifnick

    • Fördermitglied
    • Beiträge: 79
    • Geschlecht:
    Re: Modul Versandkosten anpassen: für lokale PLZ gratis
    Antwort #6 am: 19. August 2013, 18:44:46
    Gerne, here you are alle drei beschriebenen "Zustände":

    Marcus Kreusch

    • Fördermitglied
    • Beiträge: 312
    • Geschlecht:
    Re: Modul Versandkosten anpassen: für lokale PLZ gratis
    Antwort #7 am: 19. August 2013, 18:46:15
    Hallo modifnick,

    gerne :-)


    Hat Du eine Idee, wohin ich die Abfrage verschieben kann, das es bereits im Warenkorb mit 0,00€ steht, sofern der Kunde eingelogged ist?


    Ah, du lässt die Versandkosten schon im Warenkorb ausrechnen?
    Ich hab den einzufügenden Block dafür ein wenig modifiziert...
    Bei den Kommentaren, müsstest du noch selbst die DB-Abfragen machen - wenn du dir nicht sicher bist wie, schreib einfach nochmal :-)

    Code: PHP  [Auswählen]
        if(isset($order->delivery['postcode']) && isset($order->delivery['country']['iso_code_2'])){
            $delPostcode = $order->delivery['postcode'];
            $delISO = $order->delivery['country']['iso_code_2'];
        }elseif(isset( $_SESSION['customer_default_address_id']) || isset( $_SESSION['send_to'])){
           
            // Die PLZ und das Land zuerst von send_to und wenn das nicht ist, von customer_default_address_id aus der Tabelle address_book holen und in die beiden Variablen schreiben
            // $delPostcode =
            // $delISO
        }else{
            $delPostcode = '-';
            $delISO =  '-';
        }
       
       
            if( $delISO == 'DE' && in_array($delPostcode, array('99999', '99900'))){
                $this->quotes = array('id' => $this->code,
                            'module' => MODULE_SHIPPING_UPS_TEXT_TITLE,
                            'methods' => array(array('id' => $this->code,
                            'title' => $shipping_method . ' (' . $shipping_num_boxes . ' x ' . $shipping_weight . ' ' . MODULE_SHIPPING_UPS_TEXT_UNITS .')<br />' . 'Versankostenfrei wegen PLZ',
                            'cost' => 0)));
            }elseif ($freeship == true) {

    Klappt das?

    Viele Grüße
    Marcus

    modifnick

    • Fördermitglied
    • Beiträge: 79
    • Geschlecht:
    Re: Modul Versandkosten anpassen: für lokale PLZ gratis
    Antwort #8 am: 30. August 2013, 00:16:44
    Hallöchen zurück aus dem aktuellen Lernkreis ;)

    Für den Fall, das jemand ebenso Interesse an einer derartigen Lösung hat, hier der part, der in der ups.php ersetzt wurde:

    Code: PHP  [Auswählen]
    //if ($freeship == true) {
    //BOF - MK - 2013-08-30 - PLZListe free delivery
    if(isset($order->delivery['postcode']) && isset($order->delivery['country']['iso_code_2'])){
            $delPostcode = $order->delivery['postcode'];
            $delISO = $order->delivery['country']['iso_code_2'];
        }elseif(isset( $_SESSION['customer_default_address_id']) || isset( $_SESSION['send_to'])){
           if(isset($_SESSION["send_to"])){
                $q = "SELECT ab.entry_postcode AS plz, c.countries_iso_code_2 AS isocode FROM
                                address_book ab
                                LEFT JOIN countries c ON (c.countries_id = ab.entry_country_id)
                      WHERE
                        ab.address_book_id = "
    .(int)$_SESSION["send_to"];
                $r = xtc_db_fetch_array(xtc_db_query($q));
                if(isset($r["plz"]) && isset($r["isocode"])){
                    $delPostcode = $r["plz"];
                    $delISO = $r["isocode"];
                }
           }
         
           if(isset($_SESSION["customer_default_address_id"]) && (!isset($delPostcode) || !isset($delISO))){
                $q = "SELECT ab.entry_postcode AS plz, c.countries_iso_code_2 AS isocode FROM
                                address_book ab
                                LEFT JOIN countries c ON (c.countries_id = ab.entry_country_id)
                      WHERE
                        ab.address_book_id = "
    .(int)$_SESSION["customer_default_address_id"];
                $r = xtc_db_fetch_array(xtc_db_query($q));
                if(isset($r["plz"]) && isset($r["isocode"])){
                    $delPostcode = $r["plz"];
                    $delISO = $r["isocode"];
                }
           }
        }else{
            $delPostcode = '-';
            $delISO =  '-';
        }
       
       
            if( $delISO == 'DE' && in_array($delPostcode, array(
    //<here to insert comma separated zip codes>
    ))){
                $this->quotes = array('id' => $this->code,
                            'module' => MODULE_SHIPPING_UPS_TEXT_TITLE,
                            'methods' => array(array('id' => $this->code,
                            'title' => $shipping_method . ' (' . $shipping_num_boxes . ' x ' . $shipping_weight . ' ' . MODULE_SHIPPING_UPS_TEXT_UNITS .')<br />' . 'Versandkostenfrei wegen PLZ. Zustellung ggf. durch Kurier anstelle UPS.',
                            'cost' => 0)));
            }elseif ($freeship == true) {

    //EOF - MK - 2013-08-30 - PLZListe free delivery

    Ein riesiges  :thx: an Marcus. Zum selber analysieren war es auch extrem hilfreich, die php-Fehlermeldungen angezeigt zu bekommen (/export/_error_reporting.admin in _error_reporting.all umbenennen). Das hilft sehr auf dem Weg, selbständig vorwärts zu gelangen - Danke Marcus!

    LG modifnick
    5 Antworten
    3828 Aufrufe
    06. März 2013, 23:38:23 von CHRIS-AC
    0 Antworten
    2211 Aufrufe
    12. Dezember 2011, 13:17:14 von mod_max
    8 Antworten
    4068 Aufrufe
    27. September 2020, 05:20:06 von designbude
    11 Antworten
    6077 Aufrufe
    02. Februar 2010, 20:17:59 von web4design