Hallo zusammen, ich bräuchte Hilfe beim Zugriff auf die Versandkosten. Wenn der Warenkorb aufgerufen wird, wird bereits eine XML für eine spätere Verwendung zusammen gestellt. Das funktioniert auch soweit. Für den Zugriff auf die Versandkosten habe ich folgenden Thread gefunden: basket auf allen Seiten Der Aufruf in meinem Plugin sieht so aus: private function registerEvents() { $this-\>subscribeEvent('Enlight\_Controller\_Action\_Frontend\_Checkout\_Cart', 'onPostDispatchCart');}
In der Funktion ‚onPostDispatchCart‘ wird dann die Versandkostenfunktion aufgerufen: $ShippingCosts = $this-\>getShippingCosts();
Und die Funktion sieht so aus: public function getShippingCosts() { // Versandkosten ermitteln $user = array(); $user = Shopware()-\>Modules()-\>Admin()-\>sGetUserData(); $basket = Shopware()-\>Modules()-\>Basket()-\>sGetBasket(); $country = Shopware()-\>Modules()-\>Admin()-\>sGetCountry(Shopware()-\>Session()-\>sCountry ? Shopware()-\>Session()-\>sCountry : 2); $paymentID = Shopware()-\>Session()-\>sPaymentID ? Shopware()-\>Session()-\>sPaymentID : 4; $paymentData = Shopware()-\>Modules()-\>Admin()-\>sGetPaymentMeanById($paymentID, $user); if (empty($country) || empty($paymentData)){ return array('brutto'=\>0, 'netto'=\>0); }else{ return (Shopware()-\>Modules()-\>Admin()-\>sGetShippingcosts($country, $paymentData['surcharge'], $paymentData['surchargestring'])); } }
Das Problem ist, dass die Versandkosten beim Warenkorbaufruf niicht berrechnet werden. Erst beim zweiten Warenkorbaufruf werden die Daten korrekt geliefert. Hätte jemand einen Tipp für mich? Vielleicht weiß auch jemand wie ich in meinem Plugin auf die Templatevariable $sShippingcosts zugreifen kann, da diese ja im Warenkorb zur Verfügung steht. Ich habe dazu leider nichts gefunden, deswegen bin ich den ‚langen‘ Weg gegangen. Gruß
Hi, versuche es damit:$this-\>subscribeEvent( 'sAdmin::sGetPremiumShippingcosts::after', 'myShippingcostsFunction' );
Wenn Du doch auf die Templates-Variable sShippingcosts zugreifen willst: 1. Enlight_Controller_Action_PostDispatch registrieren:$this-\>subscribeEvent( 'Enlight\_Controller\_Action\_PostDispatch', 'onPostDispatchFrontend' );
2. Dann Deine onPostDispatchFrontend Funktion:public function onPostDispatchFrontend(Enlight\_Event\_EventArgs $args) { $controller = $args-\>getSubject(); $request = $controller-\>Request(); $response = $controller-\>Response(); $view = $controller-\>View(); if(!$request-\>isDispatched() || $response-\>isException() || !$view-\>hasTemplate() || $request-\>getModuleName() != 'frontend') { return; } switch($args-\>getRequest()-\>getActionName()) { case 'cart': case 'confirm': // Hier ist die: $view-\>sShippingcosts ... break; ... } }
Danke. Ich habe es jetzt so gemacht: $this-\>subscribeEvent('Enlight\_Controller\_Action\_PostDispatch\_Frontend', 'onPostDispatchCart');
und die Abfrage ob es der Cart ist mit in die Prüfung mitrein: if (!$request-\>isDispatched() || $response-\>isException() || !$view-\>hasTemplate() || $arguments-\>getRequest()-\>getActionName() != 'cart') { return; }
Nur zum Verständniss: Könnte ich diese Lösung, denn aus einem anderen Event aufrufen? [quote=“kube”]$this-\>subscribeEvent( 'sAdmin::sGetPremiumShippingcosts::after', 'myShippingcostsFunction' );
[/quote] Oder müsste ich meine komplette Funktion (also die Zusammenstellung der XML) in dieses Event packe? Grüße
Probiere es, Deine Logik komplett in deine sGetPremiumShippingcosts-Evet-Funktion zu packen, denn das ist die Funktion, die überall die Versandkosten zurück liefert. Oder gibt es irgendwelche konkreten Probleme?
Keine konkreten Probleme. Mir ging’s nur darum, die Versandkostenberechnung in eine eigene Funktion auszulagern um das ganze übersichtlicher zu halten.