2013-10-17 71 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>