Ich versuche, einen Beobachter zu verwenden, um die Antwort der Add-to-Cart-Controlleraktion zu modifizieren, aber nur im Kontext einer AJAX-Anforderung.Antwort in einem Magento-Ereignisbeobachter kann nicht geändert werden, obwohl der Beobachter feuert
Mein Beobachter ist genannt und meine JS Daten fein abruft, habe ich dies bestätigt durch eine die()
in meiner Beobachtungsfunktion cartAdd()
und Überprüfung der Antwort Entwicklerkonsole setzen, die ich das Ergebnis meiner Antwort sehen bin mit von Magento. JS ist hier nicht das Problem.
Mein Hauptproblem ist, dass ich nicht scheinen kann, die Antwort durch die normalen Funktionen zu ändern. Ich bekomme die Anfrage, indem ich $observer->getEvent()->getControllerAction()->getResponse()
benutze und dann Änderungen daran durch setHeader()
, oder setBody()
, oder jede andere Funktion, die die Antwort ändert, aber es gibt absolut keinen Effekt auf die Antwort!
Hat jemand irgendeine Ahnung, warum ich die Antwort in meinem Beobachter nicht ändern kann?
In /app/code/local/mynamespace/mymodule/etc/config.xml:
<frontend>
....
<events>
<controller_action_predispatch_checkout_cart_add>
<observers>
<mymodule_cart_add>
<type>singleton</type>
<class>mymodule/observer</class>
<method>cartAdd</method>
</mymodule_cart_add>
</observers>
</controller_action_predispatch_checkout_cart_add>
</events>
</frontend>
In /app/code/local/mynamespace/mymodule/Model/Observer.php:
public function cartAdd(Varien_Event_Observer $observer)
{
$controllerAction = $observer->getEvent()->getControllerAction();
if($controllerAction->getRequest()->isAjax()) {
$response = $controllerAction->getResponse();
// I've even tried using:
// $response = Mage::app()->getResponse();
$response->setHeader('HTTP/1.1','403 Forbidden'); //using this because i will need it in my final code and it will make it immediatly obvious the response has been changed
$response->setHeader('Content-type', 'application/json');
$response->setBody('hello world!!!!');
// this is to stop the product from being added to the cart
$controllerAction->setFlag('', Mage_Core_Controller_Varien_Action::FLAG_NO_DISPATCH, true);
}
}
Bitte beachten Sie: Ich weiß, dass dieser Code überhaupt nicht AJAXify hinzufügen wird (was mein Endziel ist). Im Moment bin ich nur versucht, dieses Problem zu beheben
ich nur am Ende immer die Inhalte der Seite, die Sie sich als Ergebnis der Ausführung eines Add den Warenkorb Aktion enden würde:
99% sicher, dass die Anforderung nach dem Auslösen des dynamischen Predispatch-Ereignisses eine andere Redirect-Einstellung enthält. Bestätigt jetzt, wird antworten. – benmarks