ajaxAmountAction

Hallo,

leider schaffe ich es nicht $this->View()->sBasketAmount in der ajaxAmoutAction in Shopware/Controllers/Frontend/Checkout.php zu überschreiben.

public function ajaxAmountAction() { Shopware()->Plugins()->Controller()->Json()->setPadding(); $amount = $this->basket->sGetAmount(); $quantity = $this->basket->sCountBasket(); $this->View()->sBasketQuantity = $quantity; $this->View()->sBasketAmount = empty($amount) ? 0 : array_shift($amount); $this->Front()->Plugins()->ViewRenderer()->setNoRender(); $this->Response()->setBody( json_encode( [‘amount’ => Shopware()->Template()->fetch(‘frontend/checkout/ajax_amount.tpl’), ‘quantity’ => $quantity] ) ); }

Über das Event 

 Enlight\_Controller\_Action\_PostDispatchSecure\_Frontend\_Checkout

möchte ich der View einen anders berechneten Wert in $subject->View()->sBasketAmount geben. Leider wird dieser nicht gezogen.

Ich gehe ganz stark davon aus, dass PostDispatch zu spät ist, da in der Action bereits der Response gesetzt wird. 

Kann mir da jemand einen anderen Ansatz geben? Und nein, ich kann nicht die Funktion sBasket::sGetAmount hooken, weil ich nichts an der 

internen Berechnung von Shopware verändern möchte. Nur die Zahl bei der Ausgabe.

Danke!

Salut,

ich hänge am gleichen Problem, wobei ich einfach nur versucht habe das Template zu überschrieben, bisher ebenfalls ohne Erfolg.

 

Hast du da evt. eine Lösung gefunden?

Hallo PhiloGant,

leider habe ich da keine Lösung dafür gefunden.

Mfg

Hallo @PhiloGant‍,

 ajaxAmountAction render keine Template deshalb ihr können die return wert nicht anderen bei die View Varaibal anderen.

die return Wert werde bei respon Boday geschickt 

Über das Event 

 Enlight\_Controller\_Action\_PostDispatchSecure\_Frontend\_Checkout

oder

 Enlight\_Controller\_Action\_PostDispatch\_Frontend\_Checkout

dann kopier einige Zeilen von ajaxAmountAction funktion

public function onPostDispatchAction(\Enlight_Controller_ActionEventArgs $arguments)
    {

        /**@var $controller \Enlight_Controller_Action */
        $controller = $arguments->getSubject();

        /**
         * @var $request \Enlight_Controller_Request_Request
         */
        $request = $controller->Request();

        /**
         * @var $response \Zend_Controller_Response_Http
         */
        $response = $controller->Response();


        /**
         * @var $view \Enlight_View_Default
         */
        $view = $controller->View();
        
        /// change what you want hier
        $view->sBasketAmount = 100;

        $body = $response->getBody();
        $body = json_decode($body);
        $body['amount'] = Shopware()->Template()->fetch('frontend/checkout/ajax_amount.tpl');
        $body = json_encode($body);
        $response->setBody($body);
}

oder etwas wie dies.

VG,

Ahmad

1 Like