更新报价项目的权重

时间:2012-07-02 12:13:29

标签: magento cart quote

我想在magento的购物车中添加产品时更新报价项目的重量。

我试过这段代码:

public function checkoutCartProductAddAfter(Varien_Event_Observer $observer)
{
   $event = $observer->getEvent();
   $quote_item = $event->getQuoteItem();
   $myWeight = ($quote_item->getWeight()/100)*$number;
   $quote_item->setWeight($myWeight);
   $quote_item->save();
}

但它不起作用。我更新了报价项目的价格 相同的功能,它的工作原理。

为什么我的新体重不适用?

4 个答案:

答案 0 :(得分:3)

使用 sales_quote_item_set_product 事件。在引用项目设置其产品之后,在每个请求上调用此事件。 这是您可以将价格和重量更改为自定义值的方法。

/*
 * Called on every request, updates item after loaded from session
 */
public function updateItem(Varien_Event_Observer $observer) 
{
    $item = $observer->getQuoteItem();
    if ($item->getParentItem()) {
        $item = $item->getParentItem();
    }

    // set price
    $item->setCustomPrice($customPrice);
    $item->setOriginalCustomPrice($customPrice);
    $item->getProduct()->setIsSuperMode(true);

    // set weight
    $item->setWeight($customWeight);
}

希望有所帮助:)

答案 1 :(得分:1)

您需要保存报价或购物车而不是报价项目。 尝试:

$quote_item->getQuote()->save();

Mage::getSingleton('checkout/cart')->save();

答案 2 :(得分:1)

您正在观察正确的事件

checkout_cart_product_add_after

无需执行此操作,您可以从功能中删除它

$quote_item->save();

但添加此

$quote_item->getProduct()->setIsSuperMode(true);

现在你的功能应该是

public function checkoutCartProductAddAfter(Varien_Event_Observer $observer)
{  
   $event = $observer->getEvent();
   $quote_item = $event->getQuoteItem();
   $myWeight = ($quote_item->getWeight()/100)*$number;

   $quote_item->getProduct()->setIsSuperMode(true);

   $quote_item->setWeight($myWeight);
}

为了不将原始产品权重写入表sales_flat_quote_item而需要做的主要事情是将item.php文件从app/code/core/Mage/Sales/Model/Quote复制到app/code/local/Mage/Sales/Model/Quote并删除以下行(v1.9 CE)第390行

->setWeight($this->getProduct()->getWeight())

现在它应该像魅力一样工作。尝试和测试

答案 3 :(得分:0)

你可以在这里试试我的代码。在sidebar.phtml

<?php
$items = Mage::getSingleton('checkout/cart')->getQuote()
    ->getItemsCollection()->getItems();
$product = Mage::getModel('catalog/product');
$total_weight = 0;
foreach ($items as $item) {
    $product = $item->getProduct();
    $qty = $item->getQty();
    $weight = $item->getWeight();
    if ($product->isConfigurable()) {
        $total_weight += ($weight * ($qty - 1));
    } else {
        $total_weight += ($weight * $qty);
    };
}
?>


<div><strong>Total Weight</strong></div>
</div><strong><?php echo $total_weight;?> KG</strong></div>