事件观察者没有获得产品详细信息

时间:2015-05-05 12:25:59

标签: php magento events observers magento-1.9.1

我在config.xml文件

中创建了一个类似下面的观察者事件
<events>          
              <sales_quote_add_item>
                  <observers>
                     <CustomModule_model_observer>
                        <type>singleton</type>
                        <class>CustomModule_Model_Observer</class>
                        <method>updatePrice</method>
                     </CustomModule_model_observer>
                 </observers>
              </sales_quote_add_item>
    </events>

在我的模型中,我创建了Observer.php

require_once 'Mage/Checkout/controllers/CartController.php';

class CustomModule_Observer
{
    public function _construct()
      {
      }

    public function getNewPrice()
      {

        $newprice = "5";

        return $newprice;
      }

     public function updatePrice($observer)
     {
        $event = $observer->getEvent();
        $product = $event->getProduct();// not getting any values how can i get this.
        $quote_item = $event->getQuoteItem();
        $new_price = $this->getNewPrice();
        $quote_item->setOriginalCustomPrice($new_price);
        $quote_item->save();
      }
  }

参考Changing the price in quote while adding product to cart: magento

2 个答案:

答案 0 :(得分:1)

您在$product = $event->getProduct();中没有获得任何值,因为在调度添加项目事件时未设置此对象。

请检查Mage_Sales_Model_Quote班级编号939。

$item->setQuote($this);
    if (!$item->getId()) {
        $this->getItemsCollection()->addItem($item);
        Mage::dispatchEvent('sales_quote_add_item', array('quote_item' => $item));
    }

它只返回quote_item对象。如果想要产品,那么你必须找到其他方式:

 $quote_item = $event->getQuoteItem(); // Which return quote item 
 $quote_item->getProduct();

我希望这对你有用谢谢。

答案 1 :(得分:0)

我试过这个,它的工作,它给了我们产品ID。

$quote = Mage::getSingleton('checkout/session')->getQuote();
$cartItems = $quote->getAllVisibleItems();
foreach ($cartItems as $item){
   $productId = $item->getProductId();
   $product = Mage::getModel('catalog/product')->load($productId);
   // Do something
}