Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Magento 更新报价项目的权重_Magento_Cart_Quote - Fatal编程技术网

Magento 更新报价项目的权重

Magento 更新报价项目的权重,magento,cart,quote,Magento,Cart,Quote,当我在magento上的购物车中添加产品时,我想更新报价项目的重量 我尝试了以下代码: public function checkoutCartProductAddAfter(Varien_Event_Observer $observer) { $event = $observer->getEvent(); $quote_item = $event->getQuoteItem(); $myWeight = ($quote_item->getWeight()/1

当我在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();
}
但它不起作用。我更新了中报价项的价格 同样的功能和它的工作


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

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


你可以在这里试试我的代码。在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>

总重量
KG

使用销售、报价、商品、套装、产品事件。在报价项设置其产品后,对每个请求调用此事件。 这就是如何将价格和重量更改为自定义值的方法

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

希望有帮助:)

你观察到了正确的事件

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);
}
需要做的主要工作是将
item.php
文件从
app/code/core/Mage/sales/Model/quote
复制到
app/code/local/Mage/sales/Model/quote
表中,以避免将原始产品重量写入表中,并删除以下行(v1.9ce)第390行


现在,它应该像一个魅力。经过尝试和测试

从哪里来的
$number
是一个从自定义选项中提取的整数,但我知道它可以工作,因为我可以显示它。如果在这个函数的末尾,我回显getWeight();我有我的重量(我想要设置的正确值),但是如果我查看我的数据库:在“sales\u flat\u quote\u item”表中保存的是旧的重量。为什么要修改报价项的重量而不是产品的重量?因为产品的重量取决于客户在产品页面上的自定义选项全域:客户给出产品的高度和宽度,因此同一产品的重量可以不同。这不确定,但我认为您不需要
$quote\u item->save()
因为在设置quote item属性时Magento的本机模块中没有使用它。我很快尝试了这个方法,结果是一样的,它不会在签出步骤中更改权重。我会一直尝试,直到它起作用,但是有人知道数据库中使用了witch值来显示购物车的重量?如果您知道问题原因,需要进行一些解释,为什么它不起作用,他应该如何处理它,需要进行哪些更改。这个答案只是在前端显示一个值。永远不会在报价单上设置值以供以后检索@aditcov您读过这个问题吗?添加到购物车时,报价项上的重量似乎不会持续。在我的observer的
setWeight()
方法中,我添加了一个日志文件来简单地记录报价项的权重。如果我在添加到购物车时使用
tail-f mylog.log
,它将正确地记录自定义重量,但是第二次触发observer方法,然后将重量设置为0.Derp,无需担心。我是根据产品上动态设置的一些值来计算重量的。由于这些值从未保存到产品中,因此它们在第一次请求后不会持久存在。我将它们保存到报价项中(我已经在其中添加了一个附加列)。仅供参考,任何人都可以看到上面的答案,这是一种享受。有一个输入错误-要编辑并移动到本地文件夹的文件是/app/code/core/Mage/Sales/Model/Quote/Item.php
$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);
}
->setWeight($this->getProduct()->getWeight())