获取产品变更

Jev*_*nov 10 magento

情况是:

管理员登录系统,他以某种方式更改产品.

例如:

将数量设置为10添加2图像更改说明

有没有办法跟踪这些变化?嗯,我的意思是准确跟踪什么,管理员如何改变?

我使用的是Magento CE 1.6

clo*_*eek 22

您可以通过对象的getOrigData()方法找到未更改的数据.获取对象的好时机是通过它的save_before事件,因此为事件创建一个观察者catalog_product_save_before.观察者可能包含以下内容:

public function onCatalogProductSaveBefore($observer)
{
  $product = $observer->getProduct();
  if ($product->hasDataChanges()) {
    $newValues = array_diff_assoc($product->getData(), $product->getOrigData());
    $oldValues = array_diff_assoc($product->getOrigData(), $product->getData());
    $added     = array_diff_key($product->getData(), $product->getOrigData());
    $unset     = array_diff_key($product->getOrigData(), $product->getData());
  }
}
Run Code Online (Sandbox Code Playgroud)

请注意,$newValues它将包括$added已更改其值的所有和现有属性.同上$oldValues$unset.


小智 5

是的,您可以通过 getOrigData() 找到未更改的数据,正如 Clockworkgeek 指出的那样,但 Magento 有一个内置函数来比较和检查数据是否已更改。该方法称为 dataHasChangedFor(),您必须传递要检查的属性。它看起来像这样。

$isChanged = $productData->dataHasChangedFor('description'); 
if ($isChanged) { 
// do somthing 
}
Run Code Online (Sandbox Code Playgroud)

这里 dataHasChanged() 方法将根据数据是否被更改返回布尔值。