1
我正在嘗試在magento項目中實現功能,以在將每個產品的狀態更改爲啓用之前驗證每個產品。我有一個自定義屬性(內部狀態),其中包含一個布爾值,我不希望管理員用戶能夠啓用產品,如果這個值是「假」。捕獲magento產品狀態更改並根據產品數據進行驗證
如何捕獲此事件,以便我可以顯示錯誤消息並且不允許狀態更改?
我正在嘗試在magento項目中實現功能,以在將每個產品的狀態更改爲啓用之前驗證每個產品。我有一個自定義屬性(內部狀態),其中包含一個布爾值,我不希望管理員用戶能夠啓用產品,如果這個值是「假」。捕獲magento產品狀態更改並根據產品數據進行驗證
如何捕獲此事件,以便我可以顯示錯誤消息並且不允許狀態更改?
我最終找到了解決方案,所以我發佈以防其他人需要它。
第一步是觀察者在/code/local/Custom/Catalog/etc/config.xml
<events>
<catalog_product_save_before>
<observers>
<custom_catalog_observer>
<class>Custom_Catalog_Model_Observer</class>
<method>validateStatusChange</method>
</custom_catalog_observer>
</observers>
</catalog_product_save_before>
</events>
添加到事件catalog_product_save_before然後創建Observer.php文件與方法validateStatusChange:
<?php
class Custom_Catalog_Model_Observer {
public function validateStatusChange(Varien_Event_Observer $observer) {
$product = $observer->getEvent()->getProduct();
Mage::log('Status change id ' . $product->getId() . " NEW " . $product->getData('status') . " OLD " . $product->getOrigData('status') . " SAP " . $product->getData('sap_disabled'));
if ($product->getData('status') == 1 && $product->getData('sap_disabled') == 1) {
Mage::getSingleton('core/session')->addError('Product status can not be changed to Enabled while SAP Disabled is active!');
$product->setData('status', 2);
$product->save();
}
return true;
}
}
?>
定製模塊需要通過創建一個文件Custom_Catalog.xml
在/ etc /模塊中註冊<?xml version="1.0"?>
<config>
<modules>
<Custom_Catalog>
<active>true</active>
<codePool>local</codePool>
<depends>
<Mage_Catalog />
</depends>
</Custom_Catalog>
</modules>
</config>