2014-11-05 139 views
2

我收到一个事件catalog_product_save_commit_after,并为它写了一个观察员以获取产品库存。在magento中保存产品前后获取产品数量

在​​3210我已经写了下面

<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

我认为你需要使用getOridData()函数之前实例化模型法师:: getModel( 'cataloginventory/stock_item')。 – Elavarasan 2014-11-05 09:52:26

回答

-1

可能是你可以尝试下面的代码,而不是使用getOrigData()

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

+0

我想你还没有明白我的要求。我想在产品库存更新前后获得产品数量 – 2014-11-05 09:36:20

2

我认为你需要在使用getOridData()函数之前实例化模型Mage::getModel('cataloginventory/stock_item')。所以 尝试,

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); 

} 

如果您有任何疑问的评论。

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();