Ein unschöner Effekt ist bisher, dass der Besucher zwar im Warenkorb eine Versandart wählen kann, um die Versandkosten zu berechnen, die gewählte Versandart aber im "Checkout" dann nicht vorbelegt ist. Das folgende Modul sorgt dafür, dass diese übernommen wird. Als "user_classes\overloads\ApplicationTopExtenderComponent\pt_shipping_ApplicationTopExtender.inc.php" speichern. (Evtl. vorhandene Leerzeichen entfernen!) PHP: <?php/* --------------------------------------------------------------pt_shipping_ApplicationTopExtender.inc.php 2014-07-12 AvengerCopyright (c) 2014 Avenger, entwiclung@powertemplate.deBuild "shipping" info based on shipping selection in cart!Store as: user_classes\overloads\ApplicationTopExtenderComponent\pt_shipping_ApplicationTopExtender.inc.php--------------------------------------------------------------*/class pt_shipping_ApplicationTopExtender extends pt_shipping_ApplicationTopExtender_parent{ function proceed() { parent::proceed(); $php_self=basename($_SERVER['PHP_SELF']); if (strpos($php_self,FILENAME_CHECKOUT_SHIPPING)!==false || strpos($php_self,'checkout.php')!==false) { if (isset($_SESSION['cart_shipping_module']) && isset($_SESSION['cart_shipping_method'])) { $quote=array(); $module=$_SESSION['cart_shipping_module']; $method=$_SESSION['cart_shipping_method']; $shipping=$module.'_'.$method; $_SESSION['shipping']=$shipping; if ($shipping=='free_free') { $title = FREE_SHIPPING_TITLE; $cost = 0; } else { global $order,$total_weight, $shipping_weight, $shipping_quoted, $shipping_num_boxes; $shipping_modules=new shipping(array('id'=>$shipping)); if (is_object($shipping_modules)) { $total_weight=$_SESSION['cart']->show_weight(); $quote = $shipping_modules->quote($method, $module); $quote=$quote[0]['methods'][0]; $title=$quote['module'].' ('.$quote['title'].')'; $cost=$quote['cost']; } } if (count($quote)>0) { if (isset($title) && isset($cost)) { $_SESSION['shipping'] = array ( 'id' => $shipping, 'title' => $title, 'cost' => $cost ); } } } } }}?> Wie immer gilt: Anwendung auf das ausschließliche Risiko des Shopbetreibers. Es gibt keinerlei Gewährleistung. Erst in einem Testshop testen. Cache leeren.
Besser wäre es natürlich, wenn das in den Gambio-Modulen, in denen die Versandkosten berechnet werden gleich gesetzt würde, da spart man sich das Modul, das alles noch mal neu berechnen muss..... In "system\overloads\CartShippingCostsControl.inc.php" nach: PHP: $_SESSION['preliminary_shipping_costs'] = array( 'module' => $p_shipping_module, 'method' => $p_shipping_method, 'costs' => $t_shipping_costs, 'formatted_costs' => $t_formatted_shipping_costs, ) einfügen PHP: //Avenger $_SESSION['shipping'] = array ( 'id' => $p_shipping_module.'_'.$p_shipping_method, 'title' => $t_shipping_module[0]['module'].' ('.$t_shipping_module[0]['methods'][0]['title'].')', 'cost' => $t_shipping_costs ); //Avenger Dann ist alles da, was der Shop weiter braucht für die Verwendung der ausgewählten Versandkosten...
Hallo Avenger, klasse! Vielen Dank, dass hat mich schon die ganze Zeit gestört. Diese Datei habe ich jedoch gar nicht: Habe 2.0.15.1 Liegt es evtl. daran? Danke, Marcus
Ich habe mit 2.0.15.4 emtwickelt, keine Ahnung ob das in 15.1 so organisisiert ist... Aber wenn Du die Modul-Lösung nimmst, brauchts Du das eh' nicht. War nur eine kleine Aufforderung an Gambio, das mal so zu lösen.
Guten Morgen Avenger, ich habe die erste Methode verwendet. Bei mir wird zwar der Radio-Button richtig gesetzt, aber kommt folgende Fehler-Meldung:- Ich habe die Version 15.4
Versuche mal diese Version: PHP: <?php/* --------------------------------------------------------------pt_shipping_ApplicationTopExtender.inc.php 2012-04-11 AvengerCopyright (c) 2014 Avenger, entwiclung@powertemplate.deBuild "shipping" info based on shipping selection in cart!Store as: user_classes\overloads\ApplicationTopExtenderComponent\pt_shipping_ApplicationTopExtender.inc.php--------------------------------------------------------------*/class pt_shipping_ApplicationTopExtender extends pt_shipping_ApplicationTopExtender_parent{ function proceed() { parent::proceed(); $php_self=basename($_SERVER['PHP_SELF']); if (strpos($php_self,FILENAME_CHECKOUT_SHIPPING)!==false || strpos($php_self,'checkout.php')!==false) { if (isset($_SESSION['cart_shipping_module']) && isset($_SESSION['cart_shipping_method'])) { $quote=array(); $module=$_SESSION['cart_shipping_module']; $method=$_SESSION['cart_shipping_method']; $shipping=$module.'_'.$method; $_SESSION['shipping']=$shipping; if ($shipping=='free_free') { $title = FREE_SHIPPING_TITLE; $cost = 0; } else { global $order,$total_weight, $shipping_weight, $shipping_quoted, $shipping_num_boxes; $shipping_modules=new shipping(array('id'=>$shipping)); if (is_object($shipping_modules)) { $total_weight=$_SESSION['cart']->show_weight(); $quote = $shipping_modules->quote($method, $module); $quote=$quote[0]['methods'][0]; $title=$quote['module'].' ('.$quote['title'].')'; $cost=$quote['cost']; } } if (isset($title) && isset($cost)) { $_SESSION['shipping'] = array ( 'id' => $shipping, 'title' => $title, 'cost' => $cost ); } } } }}?>
Merkwürdig, die gibt es standardmäßig tatsächlich nicht, weiss der Geier, wo die bei mir her kommt.... Gut, dann machen wir das in der "system/controls/CartShippingCostsControl.inc.php": Vor PHP: $t_formatted_shipping_costs = $this->v_coo_xtc_price->xtcFormat($t_shipping_costs, true, 0, true); einfügen PHP: //Avenger $_SESSION['shipping'] = $t_shipping_module[0]['methods'][0]; //Avenger Das ist aber nicht updatesicher, und nur als kleiner "Wink" an Gambio gedacht, das doch bitte in ein SP einfließen zu lassen.
Hallo Avenger, Dies mal habe ich ein anderes Problem. Es markiert zwar eine von Versandarten, aber nicht die ausgewählte Versandart der Versandkostenberechnung??
Kann es daran liegen, dass ich ein Paar Versandmodule extra habe, die von Gambio entwickelt worden sind?
Hallo, system/overloads/CartShippingCostsControl.inc.php kann z.B. durch PayPal2 ins System kommen und dient dann überhaupt nur dazu, $_SESSION['preliminary_shipping_costs'] zu setzen, damit die Warenkorb-Versandkosten an PayPal übertragen werden können, wenn man den vorgelagerten PayPal-Login benutzt. In GX2.1 wandert das dann ins normale CartShippingCostsControl.
hallo Avenger, Sorry, mein Fehler. Dein Code funktioniert wunderbar. Bloss ich habe in einem test Shop eine Versandsperre, die über Produkte eingestellt wird. Das nehme ich an war der Grund warum es bei diesem Test-Shop nicht funktioniert hat!
Hallo Avenger, Der Code funktioniert wunderbar. Allerdings ein Defizit hat er noch. Wenn man aus einem oder anderem Grund den Checkout-Prozess unterbricht oder Zurück-Button anklickt, die zuerst ausgewählte Versandart bleibt immernoch als markiert, sogar wenn man bei der Versandkostenberechnung dies Mal eine andere Versandart auswählt.
Bei näherer Betrachtung stelle ich fest, dass das Ganze ziemlich unausgegoren ist. Es gibt keinerlei Verbindung zwischen den Versand-Informationen im Cart und dem Checkout, was die Versandart betriftt. Beide berechnen ihre Versand-Info aus jeweils eigenen SESSION-Daten, deshalb ändert sich das nicht, wenn man im Cart oder im Checkout eine andere Versandarten wählt, und zwischen Cart und Checkout wechselt. Ich habe das jetzt grundlegend durch ein Overload-Modul gelöst, das die Cart-Info und die Checkout Infos verbindet. Jetzt beeinflussen sich die Auswahlen im Cart und im Checkout.... Das vorherige Modul für diesen Zweck löschen. Den Inhalt des Archivs im Anhang in die Shop-Root kopieren. Wie immer gilt: Anwendung auf das ausschließliche Risiko des Shopbetreibers. Es gibt keinerlei Gewährleistung. Erst in einem Testshop testen. Cache leeren.
Hallo Avenger, Es ist einfach Toll, dass du dich um einige Defizite vom Gambio kümmerst. Das Modul habe ich soeben ausprobiert. Es funktioniert Super. das Beste daran ist seine Updatessicherheit. Vielen Dank nochmals. Eine Kleinigkeit ist auf den Weg zu dir