在使用magento保存产品之前和之后获取产品数量

时间:2014-11-05 08:48:21

标签: magento

我抓住了一个事件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()的调用

3 个答案:

答案 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)

对于遇到这种情况的人来说,这里有两件事是错的:

  1. ...
     <catalog_product_save_commit_after>
       ...
     </catalog_product_save_commit_after>     
    

    您应该使用的事件是

    ...
     <catalog_product_save_after>
       ...
     </catalog_product_save_after> 
    

    由于方法getOridData()仅在提交事务之前可用。

  2. 获取观察员产品的方法是$observer->getEvent()->getProduct();,而不是$observer->getEvent()->getItem();

答案 2 :(得分:-1)

可能您可以尝试使用代码而不是使用getOrigData()

$product->getStockItem()->getQty();