我抓住了一个事件catalog_product_save_commit_after
并为它编写了一个观察员来获取产品库存。
在config.xml
中,我编写了以下代码
<events>
<catalog_product_save_commit_after>
<observers>
<Arkix_Logs_observer>
<type>singleton</type>
<class>Arkix_Logs_Model_Observer</class>
<method>get_update_inventory</method>
</Arkix_Logs_observer>
</observers>
</catalog_product_save_commit_after>
</events>
在Observer.php
我写过:
public function get_update_inventory( $observer){
$product = $observer->getEvent()->getItem();
$origStockData = $product->getOrigData('stock_item')->getOrigData();//to get original stock
echo '<pre>';print_r($origStockData);
$stockData = $product->getStockItem()->getData();//to get new stock
echo "product name id ".$product->getId();
die('haha');
}
但是错误即将发生在observer.php中对非对象的成员函数getOrigData()
的调用
答案 0 :(得分:2)
我认为在使用Mage::getModel('cataloginventory/stock_item')
函数之前需要实例化模型getOridData()
。所以
尝试,
public function get_update_inventory( $observer){
$productId = $observer->getProduct()->getId();
$model = Mage::getModel('catalog/product');
$_product = $model->load($productId);
$stocklevel = (int)Mage::getModel('cataloginventory/stock_item')
->loadByProduct($_product)->getQty();
print_r($stocklevel);
}
如果您有任何疑问,请在此处发表评论。
答案 1 :(得分:0)
对于遇到这种情况的人来说,这里有两件事是错的:
...
<catalog_product_save_commit_after>
...
</catalog_product_save_commit_after>
您应该使用的事件是
...
<catalog_product_save_after>
...
</catalog_product_save_after>
由于方法getOridData()
仅在提交事务之前可用。
获取观察员产品的方法是$observer->getEvent()->getProduct();
,而不是$observer->getEvent()->getItem();
答案 2 :(得分:-1)
可能您可以尝试使用代码而不是使用getOrigData()
$product->getStockItem()->getQty()
;