Magento 1.9.0.1默认情况下不会在“getDeleteUrl”中附加表单键,而是“getAddToCartUrl”

时间:2014-11-16 14:45:54

标签: php forms magento url-encoding magento-1.9

当我完成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 个答案:

答案 0 :(得分:1)

你实际上是在问两个问题,即使你只是陈述一个问题。

问题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

删除产品不需要表格密钥。要么它没有被添加,因为他们认为它不够重要或者只是被遗忘了。无论如何,删除功能应该没有表单密钥。