Hallo zusammen, Ich prüfe vor dem Bestellabschluss noch einmal ob alle Artikel am Lager sind (Shop greift nicht allein auf Lager zu). Dazu möchte ich notfalls den Bestellvorgang abbrechen, zurück zum Warenkorb und ggf. Artikel markieren falls diese nicht mehr Verfügbar sind. Die Abfrage funktioniert, die Umleitung funktioniert… ABER… Problem: Ich bekomme die Änderung am Template nicht realisiert. Nicht mal für das Minimalbeispiel, wo ich lediglich den Block “frontend_checkout_cart_cart_head” ersetze und leer lasse. Kann mir jemand helfen ? class Shopware\_Plugins\_Frontend\_ArtikelAusverkauft\_Bootstrap extends Shopware\_Components\_Plugin\_Bootstrap { public function install() { $this-\>subscribeEvent( 'Enlight\_Controller\_Action\_Frontend\_Checkout\_Finish', 'onCheckoutFinishAction' ); return true; } public function onCheckoutFinishAction(Enlight\_Event\_EventArgs $arguments) { $basket = Shopware()-\>Modules()-\>Basket()-\>sGetBasket(); foreach($basket['content'] as $basketArticle) { ... // abfrage } {if $ArtikelAusverkauft == true} $arguments-\>stop(); $arguments-\>getSubject()-\>forward('cart'); {/if} $view = $arguments-\>getSubject()-\>View(); $view-\>extendsBlock('frontend\_checkout\_cart\_cart\_head', '', 'replace'); }
Gruß Udo
Ich bringe das Thema nochmal hoch… Ich denke ich bin einen Schritt weiter… Meine Idee ist jetzt: Zwei Events, eins für den Abschluss und eins beim generellen Aufruf des Warenkorbes. Global setze ich dann eine Variable, die dann bei der Weiterleitung zum Warenkorb eine Anpassung hervorrufen soll. Allerdings scheint die globale Variable beim Aufruf von „onCheckoutFinishAction“ nicht für den nächsten Aufruf des Warenkorbes gespeichert zu werden … Sollte so ein Problem nicht generell von Interesse sein ? Vielleicht kann ja jetzt jemand helfen… class Shopware\_Plugins\_Frontend\_ArtikelAusverkauft\_Bootstrap extends Shopware\_Components\_Plugin\_Bootstrap { static protected $CheckOutTest; public function install() { $this-\>subscribeEvent( 'Enlight\_Controller\_Action\_Frontend\_Checkout\_Finish', 'onCheckoutFinishAction' ); $this-\>subscribeEvent( 'Enlight\_Controller\_Action\_PostDispatch', 'cartChange' ); return true; } static function cartChange(Enlight\_Event\_EventArgs $arguments) { $checkoutController = $arguments-\>getSubject(); $request = $checkoutController-\>Request(); $response = $checkoutController-\>Response(); if (!$request-\>isDispatched() || $response-\>isException() || $request-\>getModuleName() != 'frontend' || $request-\>getControllerName() != 'checkout') { return; } if(self::$CheckOutTest === null){ return; } else{ $view = $arguments-\>getSubject()-\>View(); $view-\>extendsBlock('frontend\_checkout\_cart\_cart\_head', '"Hallo" ', 'replace'); return; } } public function onCheckoutFinishAction(Enlight\_Event\_EventArgs $arguments) { /\*\*@var $checkoutController Shopware\_Controllers\_Frontend\_Checkout\*/ $checkoutController = $arguments-\>getSubject(); $request = $checkoutController-\>Request(); $response = $checkoutController-\>Response(); $basket = Shopware()-\>Modules()-\>Basket()-\>sGetBasket(); foreach($basket['content'] as $basketArticle) { //test: Artikel auf Lager ? if($test =! true){ self::$CheckOutTest = 1; } } if(self::$CheckOutTest === 1){ return $arguments-\>getSubject()-\>redirect('checkout/cart'); } else{ return; } } }