オブザーバーを使用して、カートコントローラーへの追加アクションの応答を変更しようとしていますが、AJAXリクエストのコンテキストでのみです。
オブザーバーが呼び出され、JSがデータを正常に取得しています。これを確認するdie()
には、オブザーバー関数cartAdd()
を挿入し、Magentoからの応答の結果を確認するために使用している応答開発者コンソールを確認します。したがって、ここではJSは問題ではありません。
私の主な問題は、通常の機能では応答を変更できないように見えることです。を使用してリクエストを取得し、、、、またはその他の応答を変更する関数を使用し$observer->getEvent()->getControllerAction()->getResponse()
て変更を加えますが、応答にまったく影響はありません。setHeader()
setBody()
オブザーバーの応答を変更できない理由について誰かが手がかりを持っていますか?
/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>
/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);
}
}
注意:このコードは、AJAXifyがカートに追加することはまったくありません(これが私の最終目標です)。現時点では、この問題を解決しようとしています
カートに追加アクションを実行した結果として表示されるページのコンテンツを取得するだけです。