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() 方法将根据数据是否被更改返回布尔值。