2013-10-17 115 views
1

我正在嘗試在magento項目中實現功能,以在將每個產品的狀態更改爲啓用之前驗證每個產品。我有一個自定義屬性(內部狀態),其中包含一個布爾值,我不希望管理員用戶能夠啓用產品,如果這個值是「假」。捕獲magento產品狀態更改並根據產品數據進行驗證

如何捕獲此事件,以便我可以顯示錯誤消息並且不允許狀態更改?

回答

0

我最終找到了解決方案,所以我發佈以防其他人需要它。

第一步是觀察者在/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>