问题
我们正在使用Magento版本1.7.0.1,我们遇到了一个问题,即用户从购物车中删除商品,购物车将重定向回主页,而不是通常只是返回结帐页面(即使没有项目(。
背景
我们将站点设置放在暂存服务器上的子文件夹中,并且它完美地工作。
这两者之间可能有什么不同?服务器本身非常相似。Ubuntu 10.04, PHP 5.3+, 等等
我只能认为这可能是一个路径问题(但没有运气追踪它(
我确实尝试了这里建议的"快速修复",但唉,没有运气。
由于它只发生在您的实时服务器上而不是暂存服务器上,因此它似乎不太可能是与代码相关的问题。尝试在 FireFox 中执行该操作,并安装并启用扩展名 TamperData 。当您逐步完成这些步骤时,您应该很好地指示网站试图将您发送到哪里,运气好的话,您会看到一个额外的重定向,它会立即单击正在发生的事情。除此之外,请确保已启用日志记录(系统>配置>开发人员>日志设置(,并检查是否没有发生实际错误。
删除操作调用_redirectReferer,传入*/*
(这反过来应该变成checkout/cart
(。_redirectReferer函数遵循 3 条路径。
- 如果有引荐来源网址,则重定向到它。
- 如果没有引荐来源网址,但有一个默认网址,请重定向到该网址
- 否则重定向到主页。
基于这些事实,您可能会立即假设步骤 3 正在发生,但由于 deleteAction 正在传递参数,因此应该不可能通过步骤 2,因为总会有一个默认 url。
我按照以下步骤解决了这个问题。
导航到"app'code'core'Mage'Checkout'controllers'CartController.php".
找到"deleteAction()
"函数,该函数将看起来像波纹管。
公共函数删除操作(( {
$id = (int) $this->getRequest()->getParam('id'); if ($id) { try { $this->_getCart()->removeItem($id) ->save(); } catch (Exception $e) { $this->_getSession()->addError($this->__('Cannot remove the item.')); Mage::logException($e); } } $this->_redirectReferer(Mage::getUrl('*/*')); }
您需要将行"$this->_redirectReferer(Mage::getUrl('*/*'));"
更改为$this->_redirect('checkout/cart');
。所以现在函数将如下所示。
public function deleteAction()
{
$id = (int) $this->getRequest()->getParam('id');
if ($id) {
try {
$this->_getCart()->removeItem($id)
->save();
} catch (Exception $e) {
$this->_getSession()->addError($this->__('Cannot remove the item.'));
Mage::logException($e);
}
}
$this->_redirect('checkout/cart');
}
以上不是这样做的方法。我只是解释了调试的地方。尝试创建一个模块并覆盖上述函数。这就是提议的方式。
有关更多信息,请参阅此链接。
谢谢