仅在第二页刷新后显示magento错误消息

时间:2013-08-26 22:01:57

标签: magento notifications

我有观察员观看活动sales_quote_item_set_product。在其中,我正在检查一些条件,以确保该项目仍然可用。如果不是,我运行此代码:

Mage::helper('checkout/cart')->getCart()->removeItem($item->getId())->save();
Mage::getSingleton('message/session')->addError($item->getName() . ' is no longer available.');

我遇到的问题是,如果某件商品无法使用且客人在产品视图页面上,则购物车会说该商品位于购物车中,但购物车的总数会更新以反映正在移除的商品。此外,不显示错误消息。如果您转到其他页面或刷新产品视图页面,将显示错误消息,并且购物车中的项目数量将是正确的。

所以我的想法是我需要在执行周期的早期运行此代码,但我不知道我应该观察什么事件,或者我根本不应该使用观察者。我尝试使用sales_quote_load_after,但这会以某种方式导致递归错误。谁能告诉我何时/何处应该运行此代码?

另一个疯狂的想法是因为我正在使用数据库会话而不是文件系统?

2 个答案:

答案 0 :(得分:1)

问题是在呈现消息块之后添加了错误。我在添加错误后通过向购物车页面添加重定向来修复它。

$request = Mage::app()->getRequest();
if($request->getModuleName() != 'checkout' && $request->getControllerName() != 'cart' && $request->getActionName() != 'index') {
    Mage::app()->getResponse()->setRedirect(Mage::getModel('core/url')->getUrl('checkout/cart/index'))
        ->sendResponse();
    exit;
}

答案 1 :(得分:0)

你没有提到它,但这听起来像你在AJAX请求期间运行代码。当你说

Mage::getSingleton('message/session')->addError($item->getName() . ' is no longer available.');

您正在向Magento的会话对象添加错误。每次Magento页面呈现时,它都会检查会话对象是否有错误,并将它们全部显示出来。这允许多个开发人员向会话添加多个错误,将Magento重定向回原始表单。

这在ajax请求期间不起作用,因为(通常)跳过呈现过程而不是JSON对象或正在呈现的简单,无错误的HTML块(在会话中保留错误)。

知道完整的请求周期是什么样的(什么是ajax,什么不是)将有助于有人为你的问题提出更具体的答案。

相关问题