Magento php添加到购物车与自定义价格

时间:2015-05-14 14:34:22

标签: php jquery ajax magento module

我有以下问题: 我在前端通过jQuery进行计算,并希望将产品添加到购物车中,并在前端计算价格。

我已经用AjaxController编写了一个自定义模块来实现添加到购物车部分,但我知道设置定制价格很困难。

我的脚本如下所示:

$_prod = json_decode(Mage::app()->getRequest()->getPost('zapfsaeule_product'));

    $id = 347; // there is only this one bundle product added to the cart  viar this scipt, so a static id is enough.

    $params = array(
        'product' => $id,
        'related_product' => null,
        'bundle_option' => array(
            6 => 17, // static options for testing purpouses
            5 => 13), // 
        'qty' => 1 // static qty for testing as well
    );

    $cart = Mage::getSingleton('checkout/cart');

    $product = new Mage_Catalog_Model_Product();
    $product->load($id);

    $cart->addProduct($product, $params);
    $cart->save();

    Mage::getSingleton('checkout/session')->setCartWasUpdated(true);

    $this->getResponse()->setBody('true'); // setting response to true, because its an ajax request.
    $this->getResponse()->setHeader('Content-type', 'text/plain');

这是添加产品的代码。 为了设置价格,我尝试了在stackexchange上的这个线程中提到的方法: https://magento.stackexchange.com/questions/4318/dynamically-calculated-prices-save-before-add-to-cart

但它没有用。我想这里观察到的事件不会出现在我的情况下,因为我写了一个自定义脚本。

但是那时仍然存在问题,如果观察者方法有效,我将如何将计算出的价格传递给观察者?

我希望你能理解这个问题并帮助我解决它。

提前致谢!

祝你好运, 马丁

3 个答案:

答案 0 :(得分:1)

通过Mage_Checkout_Model_Cart::addProduct()阅读,似乎没有办法根据参数设置商品的价格。相反,您需要添加产品,然后获取结果项并设置其价格:

$cart->addProduct($product, $params)
    ->save();

// grab the corresponding item
$item = $cart->getQuote()->getItemByProduct($product);

// set its custom price
$item->setOriginalCustomPrice($customPrice)
    ->save();

Haven没有时间尝试这个,但这应该是正确的想法。确保您设置original_custom_price字段(使用setOriginalCustomPrice()),而不是其他价格之一。其他价格在总计过程中重新计算。

答案 1 :(得分:0)

这很晚了,但我偶然发现了这一点。

我让它像这样工作:

print("identityId", identityId)

答案 2 :(得分:-1)

如果参数不起作用,请从$cart->addProduct获取退回的项目,并在保存购物车之前更改项目的价格。

$item = $cart->addProduct(...);
$item->setCustomPrice(...); {or whatever price attribute you like to set}
$cart->save();