2012-07-02 35 views
1

我想在我的購物車中添加magento商品時,更新報價商品的重量。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

'$ number'從哪裏來? – vicch

+0

這是一個自定義選項的整數,但我知道它的工作原因,我可以顯示它。如果在這個函數的末尾,我會回顯getWeight();我有myWeight(我想要設置的正確值),但是如果我看看我的數據庫:在表「sales_flat_quote_item」中,舊的權重是保存的。 – chocobob

+0

你爲什麼要修改報價產品的重量而不是產品的重量? – nachito

回答

1

您需要保存報價或購物車不是報價項目。 嘗試:

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

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

我已經快速嘗試此操作,結果是一樣的,它不會在結帳步驟中更改重量。我會嘗試,直到它的工作,但有人知道女巫的價值是用在數據庫中顯示購物車的重量? – chocobob

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> 
+0

這裏需要一些解釋,如果你有問題的原因,爲什麼它不工作,他應該怎麼做,需要做什麼改變。 – Hamad

+1

這個答案只是獲得一個值顯示在前端。值不會在報價單上設置以供以後檢索。 @aditcov你甚至讀過這個問題嗎? – pspahn

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

希望它能幫助:)

+0

添加到購物車時,重量似乎不會持續在報價單上。在我的觀察者的'setWeight()'方法中,我添加了一個日誌文件來記錄報價項的重量。如果在添加到購物車時使用'tail -f mylog.log',它會正確記錄自定義重量,但接下來會觸發觀察者方法,並將重量設置爲零。 – pspahn

+0

皮爾,從不知道。我基於產品上動態設置的一些值來計算權重Calc。由於這些值永遠不會*保存到產品中,因此在第一次請求後它們不會保留。我將它們保存到報價項目中(我已經添加了一個額外的列)。 – pspahn

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/Quoteapp/code/local/Mage/Sales/Model/Quote和刪除以下行(v1.9 CE)行#390

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

現在它應該像一個魅力。試過並測試過

+0

只是FYI給任何人看上面的答案,它是一種享受。有一個錯字 - 要編輯並移動到本地文件夾的文件是/app/code/core/Mage/Sales/Model/Quote/Item.php – PixieMedia

相關問題