我在事件checkout_controller_onepage_save_shipping_method期间验证运输报价,如果验证失败,我想将用户送回选择运输方法,但我也想显示一条消息,说明为什么失败。 Magento是否有内置的方法?

我已经在验证数据,我只是缺少重定向到运输方式和显示消息的方式。

最佳答案

与往常一样,艾伦·斯托姆(Alan Storm)的回答是有益的和启发性的。但是在这种情况下,一页结帐主要是AJAX,它会忽略 session 错误消息,直到离开结帐页,您才会看到它。

saveShippingMethodAction中,存在以下行:

$result = $this->getOnepage()->saveShippingMethod($data);

...然后$ result是JSON编码的。如果覆盖Mage_Checkout_Model_Type_Onepage::saveShippingMethod来执行检查,然后控制返回的内容,则可以插入错误消息,该错误消息将返回到浏览器并在弹出窗口中显示给用户。

您的替代可能看起来像这样:
public function saveShippingMethod($shippingMethod)
{
    if ($this->doesntApplyHere()) {
        return array('error' => -1, 'message' => $this->_helper->__('Explain the problem here.'));
    }
    return parent::saveShippingMethod($shippingMethod);
}

10-07 17:45