Estoy intentando usar un observador para modificar la respuesta de la acción del controlador añadir al carrito, pero solo en el contexto de una solicitud AJAX.No se puede modificar la respuesta en un observador de eventos Magento, aunque el observador está disparando
Mi observador es llamada y mi JS está recuperando bien de datos, he verificado esto poniendo un die()
en mi función de observador cartAdd()
y verificación de la consola del programador de respuesta, que estoy usando para ver el resultado de mi respuesta de Magento. Entonces JS no es el problema aquí.
Mi problema principal es que parece que no puedo modificar la respuesta a través de las funciones normales. Recibo la solicitud usando $observer->getEvent()->getControllerAction()->getResponse()
y luego hago cambios en ella por setHeader()
, o setBody()
, o cualquier otra función que modifique la respuesta, ¡pero no hay ningún efecto en la respuesta!
¿Alguien tiene alguna pista de por qué no puedo modificar la respuesta en mi observador?
En /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>
En /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);
}
}
Tenga en cuenta: Sé que este código no va a añadir nada al carrito (que es mi objetivo final). En este momento estoy tratando de resolver este problema
termino sólo conseguir el contenido de la página que terminarían como un resultado de ejecutar un complemento a la cesta de acción:
99% Asegúrese de que la solicitud tenga un redireccionamiento diferente configurado después de que se active el evento de predispatch dinámico. Confirmando ahora, responderá. – benmarks