Когда я сделал чистую установку 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
Для удаления продуктов не требуется ключ формы. Либо это не было добавлено, потому что они не считали это достаточно важным, либо его просто забыли. В любом случае, функция удаления должна работать без ключа формы.
Других решений пока нет …