我在magento的签出过程中有一个钩子,在observer中:checkout_controller_onepage_save_shipping_method。一旦用户在Magento中选择运输方法,然后单击"下一步"按钮保存运输方法并继续结账过程,就会发生此观察者操作。
我写了一些代码,有时可能会告诉用户(取决于各种因素,如购物车商品和它们被运送到的状态),他可能不会继续结账过程,必须打电话给商店以获得特殊的运送说明。
常规重定向函数在单页签出中不起作用,因为它被封装在AJAX脚本中,我尝试了以下方法:
Mage::getSingleton('core/session')->addError('The shipping required for one of the products you are attempting to order..');
$response1 = $observer->getResponse();
$url = Mage::getUrl('checkout/cart');
$response1->setRedirect($url);
和
Mage::throwException($this->__('The shipping required for one of the products you are attempting to order requires special instructions, please call us.'));
$observer->getRequest()->setParam('return_url','http://www.google.com/');
exit;
和
Mage::app()->getFrontController()->getResponse()->setRedirect(Mage::getUrl('checkout/cart'));
Mage::app()->getResponse()->sendResponse();
exit;
但这些都不起作用。我相信我必须覆盖OnePageController.php中的一些函数,但我不知道我需要更新什么。如有任何帮助,我们将不胜感激。谢谢
我最近在一页签出过程中尝试创建错误消息时遇到了同样的问题,经过几次尝试后,我可以取消该过程并向用户发出错误消息(我的目标是在Observer函数中执行此操作)。
我的代码:
$result['success'] = false;
$result['error'] = true;
$result['error_messages'] = implode(', ', $errors);
$response = Mage::app()->getResponse();
$response->setBody(Mage::helper('core')->jsonEncode($result));
$response->sendResponse();
exit;
您正在设置重定向并将错误附加到AJAX请求。因为这些步骤是由javascript控制的,所以有两个选项:
- 当客户提交其订单时,而不是在发货步骤之后,显示错误并重定向到购物车
- 通过重新定义
window.location
或提交隐藏表单,用javascript重定向
第一个会更容易,但第二个会提供更好的用户体验。您需要重定向到自定义控制器,以便添加错误消息并将用户发送回购物车页面。