当我对 1.9.0.1 进行全新安装并将我的设计文件复制到新安装中时,添加到购物车工作正常,但从购物车中删除产品却没有。
我注意到在核心文件中,getDeleteUrl使用:
public function getDeleteUrl()
{
if ($this->hasDeleteUrl()) {
return $this->getData('delete_url');
}
return $this->getUrl(
'checkout/cart/delete',
array(
'id'=>$this->getItem()->getId(),
Mage_Core_Controller_Front_Action::PARAM_NAME_URL_ENCODED => $this->helper('core/url')->getEncodedUrl()
)
);
}
getAddToCartUrl 使用:
public function getAddToCartUrl($product, $additional = array())
{
if (!$product->getTypeInstance(true)->hasRequiredOptions($product)) {
return $this->helper('checkout/cart')->getAddUrl($product, $additional);
}
$additional = array_merge(
$additional,
array(Mage_Core_Model_Url::FORM_KEY => $this->_getSingletonModel('core/session')->getFormKey())
);
if (!isset($additional['_escape'])) {
$additional['_escape'] = true;
}
if (!isset($additional['_query'])) {
$additional['_query'] = array();
}
$additional['_query']['options'] = 'cart';
return $this->getProductUrl($product, $additional);
}
如果你从上面的代码中注意到,getDeleteUrl 没有附加表单键,但 getAddToCartUrl 会附加,为什么会这样?
你实际上是在问两个问题,即使你只是在陈述一个问题。
问题 1:为什么删除产品不起作用
假设你正在使用"/checkout/cart/delete/id/2504/uenc/[encoded url key]/"
,它真的应该工作。请看我对第二个问题的回答。
问题 2:为什么删除链接中没有表单键。
如果你在这里检查,这个更容易:https://github.com/OpenMage/magento-mirror/blob/magento-1.9/app/code/core/Mage/Checkout/controllers/CartController.php#L490在这里: https://github.com/OpenMage/magento-mirror/blob/magento-1.9/app/code/core/Mage/Checkout/Model/Cart.php#L441
删除产品不需要表单键。要么是因为他们认为它不够重要而没有添加它,要么只是被遗忘了。无论如何,删除功能在没有表单键的情况下应该可以正常工作。