我需要在产品添加到购物车时获得产品的报价项ID,因为我需要在此事件后更新Db的字段,我已经参考了How to get Quote Item Id after adding a product to cart?,但这不起作用,我使用了event:sales_quote_product_add_after,我的oberver函数是:
$quoteItem = $observer->getEvent()->getQuoteItem();
$id = $quoteItem->getId();
我也试过
$id = $quoteItem->getItemId();
抛出以下致命错误:
Fatal error</b>: Call to a member function getId() on a non-object in <b>C:\xampp\htdocs\project\app\code\local\Custom\Module\Model\Observer.php</b> on line <b>1053</b><br />
请让我知道我做错了什么,我也从其他许多链接中提到了参考资料,但它们都没有工作。
答案 0 :(得分:1)
根据我的理解,您不会获得此事件的QuoteItems键。此事件提供items数组,其中包含为产品添加的所有项目。因此,您不必经常更改代码。
$item = $observer->getEvent()->getItems()[0];
$item_id = $item->getId();
它应该给你想要的结果。
答案 1 :(得分:1)
您应该在模块配置文件中定义一个观察者,当有人将项目添加到购物篮时,该文件会调用方法。像下面这样的东西;
<events>
<sales_quote_item_set_product>
<observers>
<quoteitem_set_eta_data>
<type>singleton</type>
<class>NameSpace_Eta_Model_Observer</class>
<method>setEtaOnQuoteItem</method>
</quoteitem_set_eta_data>
</observers>
</sales_quote_item_set_product>
</events>
然后,您的观察者方法可以使用以下内容访问引用项目;
public function setEtaOnQuoteItem($oObserver) {
$oQuoteItem = $oObserver->getQuoteItem();
$quoteId = $oQuoteItem->getItemId();
}
答案 2 :(得分:0)
以下代码可以帮助您,
$customer = Mage::getModel('customer/customer')->load($customerId);
$quote = Mage::getModel('sales/quote')->setSharedStoreIds($storeIds)
->loadByCustomer($customer);
$collection = $quote->getItemsCollection();
print_r($collection->getData());
使用customer_id加载客户并获取报价信息,以便获得报价详情。