对addAction函数使用CartController.php覆盖。
基本上,我试图接受用户输入的自定义选项,然后根据这些选项生成一个新产品,并将其添加到购物车中。我已经放下了第一部分,如果一个产品没有标记自定义属性,它会像正常一样添加。。。但如果它被标记,它会创建一个新产品,并将其添加到购物车中。
我成功地生成了新产品并将其添加到购物车中,但我无法获得客户输入的自定义选项。
$defaultprod = $product->getDefaultprod();
$prodID = $product->getId();
$prodOpt = Mage::getModel("catalog/product")->load($prodID);
if (!$defaultprod == 1) {
$cart->addProduct($product, $params);
if (!empty($related)) {
$cart->addProductsByIds(explode(',', $related));
}
$cart->save();
}
else
{
// code to create/add new product here, adding new product + adding to cart functioning, but CANNOT retrieve customer's custom attribute input
}
有什么建议吗?
这就是我刚刚成功尝试的:
- 避免将原始产品添加到购物车
- 检索最初发布在添加到购物车上的自定义选项
1)创建一个观察者
这观察到事件controller_action_predispatch_checkout_cart_add
<controller_action_predispatch_checkout_cart_add>
<observers>
<myobserver_identification>
<class>module/observer</class>
<method>myCustomMethod</method>
</myobserver_identification>
</observers>
</controller_action_predispatch_checkout_cart_add>
2)将其添加到MyNamespace_Module_Model_Observer
public function myCustomMethod() {
$request = Mage::app()->getFrontController()->getRequest();
/**
* Avoid adding original product
*/
$request->setParam('product', (bool) false);
/**
* Retrieve custom options posted on add to cart
*/
$customOptions = $request->getParam('options');
}