事件观察者未获取产品详细信息

Event observer not getting product details

我在 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

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

请检查 Mage_Sales_Model_Quote class 行号 939。

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

它只有 return quote_item 个对象。如果想要产品,那么您必须找到其他方式,例如:

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

我希望这对你有用谢谢。

我已经试过了,它起作用了,它给了我们产品 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
}