【问题标题】:magento onepage checkout, creating an error message and redirectmagento onepage checkout,创建错误消息并重定向
【发布时间】:2013-07-23 19:24:10
【问题描述】:

我在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 中的一些函数,但我不知道我需要更新什么。任何帮助将不胜感激。谢谢!

【问题讨论】:

    标签: php magento


    【解决方案1】:

    我最近在尝试在单页结帐过程中创建错误消息时遇到了同样的问题,经过几次尝试后,我可以取消该过程并用错误消息提醒用户(我的目标是在观察者中执行此操作函数)。

    我的代码:

    $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;
    

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 我将在哪里重新定义 window.location - 这是我唯一的选择,因为我不能让他们甚至提交包含购物车中某些产品的订单(如果产品正在运送到某些州)
      • window.location = 'checkout/cart' 是您在 javascript 中启动重定向的方式。您需要在单页结帐时挂钩的 javascript 事件是 shipping.save() in template/checkout/onepage/shipping.phtml。确保您重定向到一个看起来像您的第一个代码示例的自定义控制器,以便您可以添加一条消息并将用户发送到产品页面。
      猜你喜欢
      • 1970-01-01
      • 2013-11-04
      • 1970-01-01
      • 2011-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-30
      • 2014-10-23
      相关资源
      最近更新 更多