2015-09-28 72 views
1

我有以下觀察員方法:

public function ModifyOrderECC(Varien_Event_Observer $observer) 
{ 
    //sales_order_place_before 
    Mage::log('ECC!! = ModifyOrderECC has been called successfully - event/array-5', null, 'mylog.log'); 
    $cart = $observer->getEvent()->getCart(); 
    try{ 
     if($cart != NULL) 
     { 
      Mage::log('$cart contains data!', null, 'mylog.log'); 

      foreach ($cart->getItems() as $item) { 
       $getID = $item->getProduct()->getId(); 
       $productName = $item->getProduct()->getName(); 
       $productPrice = $item->getProduct()->getPrice(); 
       $quantity = (string)$item->getProduct()->getQtyOrdered(); 

       Mage::log('ID: '.$getID, null, 'mylog.log'); 
       Mage::log('Name: '.$productName, null, 'mylog.log'); 
       Mage::log('Price: '.$productPrice, null, 'mylog.log'); 
       Mage::log('Qty: '.$quantity, null, 'mylog.log'); 
      } 
     }else 
     { 
      Mage::log('sorry Cart is null :(', null, 'mylog.log'); 
     } 

    }catch(Exception $e) 
    { 
     Mage::log($e->getMessage()); 
     Mage::log('error = '.$e->getMessage(), null, 'mylog.log'); 
    } 

} 

但是getCart事件是空的,我也試了getQuote這也爲空。我需要從活動中獲取購物車的內容,以查看其創建的內容。有任何想法嗎?

回答

2

按如,sales_order_place_before事件它只提供訂單對象,使提供的報價對象直接

你想從這個事件quote object那麼你需要得到quote idOrder object然後使用quote id you can get quote object

public function ModifyOrderECC(Varien_Event_Observer $observer) 
    { 
     //sales_order_place_before 


     $QuoteID=$observer->getEvent()->getOrder()->getQuoteId(); 
    $quoteObject=Mage::getModel('sales/quote')->load($QuoteID); 
... 
    } 
+0

在$ observer中你只有訂單,getQuoteId將返回null –

+0

有一些錯誤。現在回答是更新..請立即檢查 –

1

這個事件爲您提供了一個完整的order實例,而不是一個cart實例,您可以查看Mage_Sales_Model_Order類(第1113行)。

如果你想獲取cart然後執行:

$cart = Mage::getSingleton('checkout/cart')->getQuote(); 
foreach ($cart->getAllItems() as $item) { 
    // do something 
} 
+0

我知道我可以檢索購物車,我想要做的是檢查事件對象也是一樣的,然後對其進行修改。 – lemunk