magento单页签出,创建一条错误消息并重定向


magento onepage checkout, creating an error message and redirect

我在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重定向

第一个会更容易,但第二个会提供更好的用户体验。您需要重定向到自定义控制器,以便添加错误消息并将用户发送回购物车页面。