Magento 1.6 - 在添加到购物车期间检索客户输入的自定义选项(CartController.php / addAction)

时间:2012-08-27 08:07:27

标签: php zend-framework magento magento-1.6

使用CartController.php覆盖addAction函数。

基本上我正在尝试使用用户输入的自定义选项,然后根据这些选项生成新产品,并将其添加到购物车中。我有第一部分,如果产品没有标记的自定义属性,它会像平常一样添加...但如果它被标记,它会创建一个新产品并将其添加到购物车。

我已成功生成新产品并将其添加到购物车,但我无法获得客户输入的自定义选项。

$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 个答案:

答案 0 :(得分:0)

这就是我刚刚成功尝试的:

  • 避免将原始产品添加到购物车
  • 检索最初在添加到购物车时发布的自定义选项

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');
}