0

我在magento的结帐过程中有一个钩子,在观察者中:checkout_controller_onepage_save_shipping_method。一旦用户在 Magento 中选择了一种运输方式,然后单击“下一步”按钮以保存运输方式并继续结帐过程,就会发生此观察者操作。

我编写的代码有时可能会告诉用户(取决于各种因素,例如购物车物品和它们被运送到的状态)他可能不会继续结帐过程,而是必须致电商店以获得特殊的运输说明。

常规重定向功能在 onepage checkout 中不起作用,因为它包含在 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 中的一些函数,但我不知道我需要更新什么。任何帮助将不胜感激。谢谢!

4

2 回答 2

1

I had the same problem recently when I was trying to create a error message on onepage checkout process and after a several tries I could cancel the process and alert the user with an error message (my goal was to do this in a Observer function).

My code:

$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;
于 2015-01-16T10:12:41.640 回答
0

您正在设置重定向并将错误附加到 AJAX 请求。因为这些步骤是由 javascript 控制的,所以您有两种选择:

  • 当客户提交他或她的订单时而不是在运输步骤之后显示错误并重定向到购物车。
  • window.location通过重新定义或提交隐藏表单在 javascript 中重定向

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

于 2013-07-23T19:39:49.357 回答