2

当我在 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

4 回答 4

3

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

/*
 * 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);
}

希望能帮助到你 :)

于 2014-05-27T12:11:04.183 回答
1

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

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

或者

Mage::getSingleton('checkout/cart')->save();
于 2012-08-03T20:50:29.320 回答
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复制到并删除以下行(v1.9 CE)行#390item.phpapp/code/core/Mage/Sales/Model/Quoteapp/code/local/Mage/Sales/Model/Quote

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

现在它应该像魅力一样工作。久经考验

于 2015-11-04T13:07:57.470 回答
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>
于 2013-11-19T12:53:05.540 回答