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: Mehrere flat und mehrere freeamount - doppelte Anzeige

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.127
    • Geschlecht:
    Ich habe mehere flat und zwei freeamount Module, die auch alle wunderbar funktionieren.
    Also für Zwei Länder Versandkostenfrei ab bestimmten Werten. Und 7 Unterschiedliche Zonen von Versandkosten.

    Wie bekomme ich es in der 1.06 hin, dass der Kunde die flat module nicht mehr angezeigt bekommt, wenn freeamount schon da ist.

    Ich hatte jetzt tatsächlich einen Kunden, der Versandkosten ausgewählt hat, obwohl direkt darüber Versandkostenfrei auszuwählen war.  :datz:

    Suchfunktion des Forums ist leider aus, und Tante G war nicht hilfreich.

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

    piru

    • Fördermitglied
    • Beiträge: 1.263
    • Geschlecht:
    Re: Mehrere flat und mehrere freeamount - doppelte Anzeige
    Antwort #1 am: 31. Oktober 2014, 13:18:12
    Hallo Bonsai,

    ich habe das so gelöst:

    checkout_shipping.php ab ca. Zeile 213 folgendes hinzugefügt:
    nach
    Code: PHP  [Auswählen]
    #loop through installed shipping methods...
    folgendes:
    Code: PHP  [Auswählen]
                    $hubo_cero=0;
                    for($i=0,$n=sizeof($quotes);$i<$n;$i++) {
                                    for($j=0,$n2=sizeof($quotes[$i]['methods']);$j<$n2;$j++) {
                                            if($quotes[$i]['methods'][$j]['cost']==0) { $hubo_cero=1; break 2; }
          }
        }          
                    if($hubo_cero) {
                      $q=$quotes[$i]; $quotes=array(0=>$q);
            }

    Gruß piru

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.127
    • Geschlecht:
    Re: Mehrere flat und mehrere freeamount - doppelte Anzeige
    Antwort #2 am: 31. Oktober 2014, 13:35:10
    Dankeschön! Funktioniert wunderbar!

    MoHo

    • Fördermitglied
    • Beiträge: 117
    Re: Mehrere flat und mehrere freeamount - doppelte Anzeige
    Antwort #3 am: 07. Januar 2015, 23:42:03
    Wenn der Kunde die Möglichkeit zum kostenfreien Versand hat, verschwindet die Auswahl "Selbstabholung", deswegen habe ich jetzt eine überarbeitete Lösung implementiert.
    Soweit ich das getestet habe funktioniert es, aber eventuell könnte ja mal ein PHP Profi über den Code schauen.
    Wie auch in dem anderen Beispiel wird die Erweiterung hinter dieser Zeile eingefügt:
    Code: PHP  [Auswählen]
            #loop through installed shipping methods...
    Code: PHP  [Auswählen]
            # MoHo 2015-01-07 -free amount- if there is a freeamount shipping module (except selfpickup) the other modules will not be shown to the customer.
                    $free_quotes = array();
                    for($i=0,$n=sizeof($quotes);$i<$n;$i++) {
                            for($j=0,$n2=sizeof($quotes[$i]['methods']);$j<$n2;$j++) {
                                    if($quotes[$i]['methods'][$j]['cost']==0) {
                                            $free_quotes[] = $quotes[$i];
                                            break;
                                    }
                            }
                    }
                    if((sizeof($free_quotes)==1 && $free_quotes[0]['id'] != 'selfpickup') || sizeof($free_quotes)>1) {
                            $quotes = $free_quotes;
            }
                    # End MoHo -free amount-

    Da in der Regel sich die meisten Kunden aber die Ware zusenden lassen wollen, soll freeamount vorausgewählt sein.
    Dafür füge ich nach dem nachfolgendem Code, der direkt hinter der ersten Ergänzung kommt:
    Code: PHP  [Auswählen]
                    for ($i = 0, $n = sizeof($quotes); $i < $n; $i ++) {
                            if (!isset ($quotes[$i]['error'])) {
                                    for ($j = 0, $n2 = sizeof($quotes[$i]['methods']); $j < $n2; $j ++) {
                                            # set the radio button to be checked if it is the method chosen
                                            $quotes[$i]['methods'][$j]['radio_buttons'] = $radio_buttons;
                                            $checked = ((isset($_SESSION['shipping']) && $quotes[$i]['id'].'_'.$quotes[$i]['methods'][$j]['id'] == $_SESSION['shipping']['id']) ? true : false);
                                            if (($checked == true) || ($n == 1 && $n2 == 1)) {
                                                    $quotes[$i]['methods'][$j]['checked'] = 1;
                                            }

    die folgenden Zeilen ein:

    Code: PHP  [Auswählen]
                                            # MoHo 2015-01-07 -preselect free shipping- if there is a free shipping module and selfpickup available the free shipping module will be preselected.
                                            else if ($n == 2 && $n2 == 1 && $quotes[$i]['methods'][$j]['cost'] == 0 && $quotes[($i + 1) % 2]['id'] == 'selfpickup' && !(isset($_SESSION['shipping']) && 'selfpickup_'.$quotes[($i + 1) % 2]['methods'][0]['id'] == $_SESSION['shipping']['id'])) {
                                                    $checked = true;
                                                    $quotes[$i]['methods'][$j]['checked'] = 1;
                                            }
                                            # END MoHo -preselect free shipping-

    Was jetzt noch nicht ganz richtig funktioniert ist, dass ich eigentlich erreichen wollte, dass sich das System die Einstellung während der Session merkt, wenn man von Versandkostenfrei auf Selbstabholung gewechselt hat. Geht man aber wieder zurück um noch was zu bestellen, dann wird wieder Versandkostenfrei ausgewählt. Das ist jetzt zwar nicht ganz so schlimm und war bisher auch schon immer so, aber das ist nicht perfekt.

    Wer keine Selbstabholung hat, braucht diese Lösung nicht. Wir haben aber noch einen Laden und da können die Kunden Abends bestellen und Mittags die Ware abholen.

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.127
    • Geschlecht:
    Re: Mehrere flat und mehrere freeamount - doppelte Anzeige
    Antwort #4 am: 18. Januar 2015, 14:03:39
    Danke MoHo, konnte ich gerade gut gebrauchen! Ich setze gerade einen Weiteren Shop auf und da ist Barzahlung bei Selbstabholung gewünscht.

    FAndi

    • Fördermitglied
    • Beiträge: 5
    • Geschlecht:
    Re: Mehrere flat und mehrere freeamount - doppelte Anzeige
    Antwort #5 am: 12. Juni 2015, 15:15:33
    Hab auch die Anpassung von MoHo eingebaut. Funktioniert wunderbar.
    Vielen Dank dafür!!

    Teratek

    • Schreiberling
    • Beiträge: 273
    Re: Mehrere flat und mehrere freeamount - doppelte Anzeige
    Antwort #6 am: 08. Juli 2016, 13:13:29
    Ich versuche gerade in der checkout_shipping.php die Abholung immer aktiviert zu haben.

    Meine Quelldatei sieht etwas anders aus bzw. es ist eine If Abfrage davor, die bei Erreichen der Versandkostenfreiheit gar nicht erst in die Schleife geht.

    Code: PHP  [Auswählen]
                    # free shipping or not...
                   if ($free_shipping == true) {
                    $module_smarty->assign('FREE_SHIPPING_TITLE', FREE_SHIPPING_TITLE);
                    $module_smarty->assign('FREE_SHIPPING_DESCRIPTION', sprintf(FREE_SHIPPING_DESCRIPTION, $xtPrice->xtcFormat($free_shipping_value_over, true, 0, true)).xtc_draw_hidden_field('shipping', 'free_free'));
                    $module_smarty->assign('FREE_SHIPPING_ICON', $quotes[$i]['icon']);
     

    Code: PHP  [Auswählen]
    #loop through installed shipping methods...
                    for ($i = 0, $n = sizeof($quotes); $i < $n; $i ++) {
                            if (!isset ($quotes[$i]['error'])) {
                                    for ($j = 0, $n2 = sizeof($quotes[$i]['methods']); $j < $n2; $j ++) {
                                            # set the radio button to be checked if it is the method chosen
                                            $quotes[$i]['methods'][$j]['radio_buttons'] = $radio_buttons;
                                            $checked = ((isset($_SESSION['shipping']) && $quotes[$i]['id'].'_'.$quotes[$i]['methods'][$j]['id'] == $_SESSION['shipping']['id']) ? true : false);
                                            if (($checked == true) || ($n == 1 && $n2 == 1)) {
                                                    $quotes[$i]['methods'][$j]['checked'] = 1;
                                            }
                                            if ($quotes[$i]['id'].'_'.$quotes[$i]['methods'][$j]['id'] == $_SESSION['shipping']['id']) {
                                            echo '<script type="text/javascript">var shipping_selected="' . $radio_buttons . '"</script>';
                                            }
                                            if (($n > 1) || ($n2 > 1)) {
                                                    if ($_SESSION['customers_status']['customers_status_show_price_tax'] == 0 || !isset($quotes[$i]['tax'])) {
                                                            $quotes[$i]['tax'] = 0;
                }
                                                    $quotes[$i]['methods'][$j]['price'] = $xtPrice->xtcFormat(xtc_add_tax($quotes[$i]['methods'][$j]['cost'], $quotes[$i]['tax']), true, 0, true);                                         
                $quotes[$i]['methods'][$j]['radio_field'] = xtc_draw_radio_field('shipping', $quotes[$i]['id'].'_'.$quotes[$i]['methods'][$j]['id'], $checked, 'id="'.($i+1).'" onclick="setChecked(this);"');
                                            } else {
                                                    if ($_SESSION['customers_status']['customers_status_show_price_tax'] == 0) {
                                                            $quotes[$i]['tax'] = 0;
                }
                $quotes[$i]['methods'][$j]['price'] = $xtPrice->xtcFormat(xtc_add_tax($quotes[$i]['methods'][$j]['cost'], isset($quotes[$i]['tax']) ? $quotes[$i]['tax'] : 0), true, 0, true).xtc_draw_hidden_field('shipping', $quotes[$i]['id'].'_'.$quotes[$i]['methods'][$j]['id']);
                                            }
                                            $radio_buttons ++;
                                    }
                            }
                    }
     

    Wie kann ich dafür sorgen, dass Abholung immer angezeigt wird?

    Teratek

    • Schreiberling
    • Beiträge: 273
    Re: Mehrere flat und mehrere freeamount - doppelte Anzeige
    Antwort #7 am: 09. Juli 2016, 14:31:01
    Wenn beide module: ot_shipping und freeamount eingerichtet sind klappt es
    20 Antworten
    11597 Aufrufe
    29. Juli 2013, 18:42:27 von Jan-Lukas
    2 Antworten
    1675 Aufrufe
    29. September 2016, 13:29:37 von FS72
    2 Antworten
    2668 Aufrufe
    19. November 2012, 18:55:09 von Iroplis
    1 Antworten
    1362 Aufrufe
    13. Oktober 2017, 15:15:25 von webald
               
    anything