rukpat 的答案在 Magento 1.8 中不起作用。扩展 CartController 的 addAction 方法后,您需要像这样格式化 URL 和查询字符串:
http://www.example.com/checkout/cart/add?product=76&qty=1&return_url=http://www.example.com/index.php/checkout/cart/couponPost?coupon_code=WQ9D-XXXX
您也可以省略最后一个 return_url 参数。没有必要包括 ; (分号)。
您还可以通过简单地执行以下操作将多个产品添加到具有多个数量的 URL:
http://www.example.com/checkout/cart/add?product=76&related_product=28,28,28&return_url=http://www.example.com/index.php/checkout/cart/couponPost?coupon_code=WQ9D-XXXX
因此,只需添加 &related_product=28,28,28 并多次引用产品 ID,您就可以添加该商品的多个数量。不是很优雅,但它有效。
当然,最好扩展 CartController 的 addAction 方法。
为了让这个解决方案在 Magento 1.8 及更高版本中工作,您需要像这样修改 CartController:
注意:将“命名空间”替换为您自己的命名空间(公司名称或您的姓名等)。
etc/modules/Namespace_AddProductFromUrl.xml
<?xml version="1.0"?>
<config>
<modules>
<Namespace_AddProductFromUrl>
<active>true</active>
<codePool>local</codePool>
</Namespace_AddProductFromUrl>
</modules>
</config>
app/code/local/Namespace/AddProductFromUrl/controllers/Checkout/CartController.php
<?php
require_once 'Mage/Checkout/controllers/CartController.php';
class Namespace_AddProductFromUrl_Checkout_CartController extends Mage_Checkout_CartController {
# overloaded addAction
public function addAction()
{
// generate form_key if missing or invalid
if ( ! ($formKey = $this->getRequest()->getParam('form_key', null)) or $formKey != Mage::getSingleton('core/session')->getFormKey())
{
$this->getRequest()->setParams(array('form_key' => Mage::getSingleton('core/session')->getFormKey()));
}
// do parent actions
parent::addAction();
}
}
应用程序/代码/本地/命名空间/AddProductFromUrl/etc/config.xml
<config>
<frontend>
<routers>
<checkout>
<args>
<modules>
<Namespace_AddProductFromUrl before="Mage_Checkout">Namespace_AddProductFromUrl_Checkout</Namespace_AddProductFromUrl>
</modules>
</args>
</checkout>
</routers>
</frontend>
</config>