Hallo! Ich habe hier im Forum schon öfter gelesen, dass einige Nutzer hier das Versandsperre-Modul (GX2) von shop-erweiterungen.de verwenden. Das Ding funktioniert ja wirklich wunderbar, allerdings ist dort das neue Warenkorb-Versandkosten-Update natürlich noch nicht berücksichtigt. Hat jemand von euch schon eine Lösung, wie man auch im Warenkorb die "gesperrten" Versandarten blockieren kann? Bin für alle Ideen dankbar! Grüße, Johannes
Hallo! Ich hab jetzt für mich eine Lösung gefunden Da ich das Modul ziemlich umgebastelt habe, bringt es nichts, wenn ich hier meinen Code poste. Und das Ganze wieder auf den Original-Code umzuschreiben, ist mir zuviel Arbeit und hab ich auch nicht getestet, ob's funktioniert. Aber ein paar Tipps möchte ich doch beisteuern, die euch vielleicht dabei helfen, euer eigenes Versandsperre-Modul entsprechend zu ändern. Also: 1. Der Code für das Modul muss in die gx2/includes/classes/shipping.php - dann wirkt er sich sowohl auf die Anzeige im Warenkorb und auf der checkout_shipping.php aus. Das erfordert allerdings ein paar Anpassungen. 2. Den Datenbank-Abfrage-Teil habe ich in die function shipping_ORIGIN eingefügt, ans Ende des if (defined('MODULE_SHIPPING_INSTALLED') && xtc_not_null(MODULE_SHIPPING_INSTALLED)) Blockes. Ich weiß nicht, ob er wirklich hier am besten aufgehoben ist, aber bei mir funktionierts bisher, und die erforderliche $order wird wenig oberhalb ohnehin schon aufgerufen. 3. Den Versandarten-Sperren-Teil habe ich in die function quote eingefügt, am Ende des if (is_array($this->modules)) Blockes. Zu beachten ist hier, dass der Array, auf den wir zugreifen wollen, in dieser Datei nicht $quotes[$i] heißt, sondern $quotes_array[$i]. Statt $n = sizeof($quotes); kann hier die Variable $size verwendet werden, die etwas weiter oben definiert wurde. Sieht dann ganz grob ungefähr so aus: PHP: function shipping_ORIGIN($module = '') { ... if (empty($order)) { ... } if (defined('MODULE_SHIPPING_INSTALLED') && xtc_not_null(MODULE_SHIPPING_INSTALLED)) { ... ... $GLOBALS[$include_modules[$i]['class']] = new $include_modules[$i]['class']; } } }//hier neuen Code einfügen: for-Schleife mit $forbidden_shipping_query = xtc_db_query("SELECT forbidden_shipping FROM ".TABLE_PRODUCTS." WHERE products_id = '".$id."'"); etc. // ende neuer Code } } function quote($method = '', $module = '') { ... $size = sizeof($include_quotes); for ($i=0; $i<$size; $i++) { $quotes = $GLOBALS[$include_quotes[$i]]->quote($method); if (is_array($quotes)) $quotes_array[] = $quotes; }// hier neuen Code einfügen for ($i = 0; $i <= $size; $i++){ if (/*Bedingung für Sperre*/) { unset($quotes_array[$i]); } } // ende neuer Teil } return $quotes_array; } Ich hoffe ich habe nichts wesentliches vergessen, und diese grobe Anleitung hilft dem einen oder anderen Gambio-Nutzer, sich die Versandsperre wieder so hinzubasteln, dass sie funktioniert. Grüße, Johannes
Naja, was in dem Modul von shop-erweiterungen.de halt als Bedingung verwendet wird ($quotes[$i]['id'] == $forbidden_shipping - wobei man, wie oben beschrieben, $quotes[$i] natürlich noch zu $quotes_array[$i] abändern muss, weil diese Variable in dieser Datei eben anders heißt). Ich hoffe, diese Antwort hilft dir weiter. Grüße, Johannes Edit: Nur zur Sicherheit: Es handelt sich bei meinem Posting oben nicht um eigenständigen Code, sondern nur um eine Anleitung, wie man das Modul von shop-erweiterungen.de (das nicht von mir stammt, Link siehe oben) abändern kann.
Hallo Alex, dieses Modul von Alkim http://www.alkim.de/Module/Gebuehren-und-Versand-Module/Artikelabhaengige-Versandarten.html könnte für diesen Zweck vielleicht auch funktionieren. Hab aber selber keine Erfahrungen damit. Bitte direkt beim Anbieter nachfragen, ob das Ding mit dem Warenkorbupdate kompatibel ist. Grüße, Johannes
Hallo Johannes, danke für die Anregung. Das Habe ich jetzt selbs zum Laufen gebracht. So wäre es richtig: PHP: function quote($method = '', $module = '') { ... $size = sizeof($include_quotes); for ($i=0; $i<$size; $i++) { $quotes = $GLOBALS[$include_quotes[$i]]->quote($method); if (is_array($quotes)) $quotes_array[] = $quotes; } //hier neuen Code einfügen: for-Schleife mit $forbidden_shipping_query = xtc_db_query("SELECT forbidden_shipping FROM ".TABLE_PRODUCTS." WHERE products_id = '".$id."'"); etc. for ($i = 0; $i <= $size; $i++){ if (/*Bedingung für Sperre*/) { unset($quotes_array[$i]); } } // ende neuer Teil } return $quotes_array; }
Ah das hab ich dann wohl beim Rückübertragen meiner Änderungen vergessen, sorry (ich verwende in meiner stärker abgewandelten Version das forbidden_shipping Feld gar nicht mehr). Schön, dass du es trotzdem hinbekommen und den Fehler hier berichtigt hast. Grüße Johannes
Hallo Johannes, wäre dankbar wenn du deine Änderung deutlicher schreiben würdest. Und hast du auch eine Lösung für die Integration von Versandsperre in GX 2.1? Danke
Hallo Cyrus, wenn du ohnehin auf 2.1 updaten möchtest, würde ich dir eher das hier empfehlen: http://www.xycons.de/Module-und-Erweiterungen/Versand--und-Bezahlsperre.html Da gehe ich davon aus, dass Holger das auch für GX2.1 anbieten wird. Grüße Johannes
Schade, dass nach gut 2,5 Jahren nach Erfindung der Overloads in Gambio immer noch wild in den Modulen geändert wird... Und beim nächsten Update geht es wieder von vorne los....
Hallo Avenger, Hast du dann eine Lösung für GX 2.1? Wenn ja schick mir bitte eine Kostenvoranschlag unter kraeutlein@t-online.de. Vielen Dank
So ist das halt, Avenger, wenn man etwas ausgefalleneres braucht (Versandsperre alleine tut's bei mir nicht) und nicht genug Zeit und Geld hat, das von einem Profi machen zu lassen - dann muss man eben mit den vorhandenen Kenntnissen selber basteln Und wenn man mit dem Überladen und dem Zeugs nicht so firm ist, ist das z.T. eben einfacher, direkt am Code was zu ändern, da sieht man wenigstens auf Anhieb, was passiert. Aber wie du siehst, empfehle ich ein Jahr später anderen schon das Modul von Holger (ich nehme an, der wird das schon professionell machen - von ihm gab's damals aber noch kein solches Modul, da hatte ich nämlich nachgeschaut). Grüße Johannes
Ja, Danke für die Empfehlung. Das Modul von Holger kenne ich schon. Ich habe aber seit längere Zeit das Modul "Versandsperre" und es funktioniert eigentlich sehr gut bei mir. Ich wollte halt wissen was du genau gemacht hast um das Modul auch im Warenkorb zum Funktionieren zu bringen. Aber so wie es aussieht, du kannst dich nicht mehr daran erinnern, da du es nicht mehr benutzst. Trotzdem, vielen Dank, dass du dich gemeldet hast.
Ich benutze es zwar noch, hab aber schon länger nicht mehr daran herum gebastelt. Ich hab doch oben genau erklärt, was ich alles geändert habe, bei welchem Teil brauchst du denn Hilfe? Die Frage ist aber, ob sich der Aufwand für dich hier lohnt: Spätestens wenn du auf GX2.1 updaten willst, stehst du nämlich damit alleine da - da werde ich in absehbarer Zeit nicht die Zeit dafür haben, mich mit dem zu beschäftigen. Grüße Johannes
Ganz ehrlich gesagt, werde ich auch nicht, so lange ich nicht muß, auf GX2.1 umstellen. Mein shop funktioniert so wie es ist sehr gut. Natürlich außer die Sache mit der Versandsperre im bezug zu Warenkorb. Was ich von deine Erklärung oben nicht verstehe sind 2 Sachen: 1: Im ersten Teil Bis wo geht "etc." 2: Was du mit "if (/*Bedingung für Sperre*/)" meinst. Sollte das so heißen: if($quotes[$i]['id'] == $forbidden_shipping)? Wäre nett wenn du das Teil genau wie du es gemacht hast, kopieren und hier reinsetzen würdest. Oder mir per PN zukommen lassen würdest. Mit GX2.1, das Problem ist, ich habe Gambio nach dieser Erweiterung gefragt. Ich war in der Meinung, dass dieses Problem einige Shopbetreiber betrifft, daher gibt es auch die Leute die für diese Problem Module oder Anpassungen im Code anbieten. Aber Gambio meint, dass diese nur mein Problem wäre und sie haben bis jetzt keine Nachfrage für diese Erweiterung gehabt! Auf jeden Fall, wäre ich dankbar für deine Mühe. Danke.
Ich hab das ja wie gesagt noch weiter umgebaut, also mein Code wird dir nicht viel nützen (außer du willst noch einen größeren Umbau zusätzlich machen, der Mindestbestellmengen, ob der Checkout überhaupt erlaubt ist, und die Versandarten abhängig davon regelt, ob und wie viele Tiefkühlprodukte im Warenkorb liegen ) Gesamte for-Schleife mit allem, was vorher auch in der for-Schleife drin stand. Eventuell musst du aufpassen, ob die Variablen hier anders heißen müssen (siehe Punkt 2). Fast. Müsste dann wohl if($quotes_array[$i]['id'] == $forbidden_shipping) heißen, weil die Variable $quotes hier $quotes_array heißt. Ich hoffe, das hilft dir weiter Grüße, Johannes
Hallo Johannes, vielen Dank für die Anleitung. Es hat geklappt. Ich hate es das erste Mal auch richtig eingegeben. Was ich übersehen hatte, war das du die Variable $n zu $size geändert hattest. Als es sieht so aus: PHP: $size = sizeof($include_quotes); for ($i=0; $i<$size; $i++) { $quotes = $GLOBALS[$include_quotes[$i]]->quote($method); if (is_array($quotes)) $quotes_array[] = $quotes; } //BOF forbidden Shipping for($i = 0, $n = count($order->products);$i < $n; $i++ ){ $id = $order->products[$i]['id']; $forbidden_shipping_query = xtc_db_query("SELECT forbidden_shipping FROM ".TABLE_PRODUCTS." WHERE products_id = '".$id."'"); if($i == '0') $forbidden_shipping_data = xtc_db_fetch_array($forbidden_shipping_query); else { $puffer = xtc_db_fetch_array($forbidden_shipping_query); if($puffer['forbidden_shipping'] != ''){ $forbidden_shipping_data['forbidden_shipping'] .= "|"; $forbidden_shipping_data['forbidden_shipping'] .= $puffer['forbidden_shipping']; } } } for ($i = 0; $i <= $size; $i++){ if($quotes_array[$i]['id'] == $forbidden_shipping){ unset($quotes_array[$i]); } } //EOF forbidden Shipping } return $quotes_array; } Nochmals vielen Dank. ich werde es bei Gelegenheit auch an GX2.1 mal testen und werde ich es hier berichten. Auch was Interessant wäre, ist die Aufregung von Avenger. Als Klassen Overload! Mal sehen ob er uns einen Tip gibt, wie das zu machen ist!
Korrekt wäre so: PHP: //BOF forbidden Shippingfor($i = 0, $n = count($order->products);$i < $n; $i++ ){ $id = $order->products[$i]['id']; $forbidden_shipping_query = xtc_db_query("SELECT forbidden_shipping FROM ".TABLE_PRODUCTS." WHERE products_id = '".$id."'"); if($i == '0') $forbidden_shipping_data = xtc_db_fetch_array($forbidden_shipping_query); else { $puffer = xtc_db_fetch_array($forbidden_shipping_query); if($puffer['forbidden_shipping'] != ''){ $forbidden_shipping_data['forbidden_shipping'] .= "|"; $forbidden_shipping_data['forbidden_shipping'] .= $puffer['forbidden_shipping']; } }}$forbidden_shipping_data = explode("|",$forbidden_shipping_data['forbidden_shipping']);foreach($forbidden_shipping_data AS $forbidden_shipping){ for ($i = 0; $i <= $size; $i++){ if($quotes_array[$i]['id'] == $forbidden_shipping){ unset($quotes_array[$i]); } }}//EOF forbidden Shipping Das funktionier auf shopping_cart.php. Probleme macht die nächste seite checkout_shipping.php. Der letzer Versandart ist immer nicht auswählbar.
Oh, könnte sein, dass du in der checkout_shipping.php auch nochmal bei einer for-Schleife ein "<" durch ein "<=" ersetzen musst: PHP: /* vorher: for ($i = 0, $n = sizeof($quotes); $i < $n; $i ++) {// jetzt: */for ($i = 0, $n = sizeof($quotes); $i <= $n; $i ++) {// Mod Ende - weiter wie vorher: if (!isset ($quotes[$i]['error'])) { /* usw. usf. - alles was hier vorher auch in der Schleife stand */ }}$module_smarty->assign('module_content', $quotes); Diese Änderung war aber glaube ich in dem Original-Modul (ohne Warenkorb-Update) auch schon drin. Grüße Johannes