Beyer
1
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?
Beyer
3
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 „Gefällt mir“