我想在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();
}
但它不起作用。我更新了报价项目的价格 相同的功能,它的工作原理。
为什么我的新体重不适用?
答案 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>