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:
#loop through installed shipping methods...
# 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:
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:
# 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.