捕获magento产品状态更改并根据产品数据进行验证

时间:2013-10-17 14:05:12

标签: magento

我正在尝试在magento项目中实现功能,以便在将其状态更改为启用之前验证每个产品。我有一个包含bool值的自定义属性(内部状态),如果此值为“false”,我不希望admin用户能够启用该产品。

如何捕获此事件以便显示错误消息并且不允许状态更改?

1 个答案:

答案 0 :(得分:0)

我最终找到了解决方案,所以我发帖以防其他人需要它。

第一步是在/code/local/Custom/Catalog/etc/config.xml

中为事件 catalog_product_save_before 添加一个观察者
    <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>

然后我使用validateStatusChange:

方法创建了Observer.php文件
<?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 / modules中注册自定义模块
<?xml version="1.0"?>
<config>
  <modules>
    <Custom_Catalog>
      <active>true</active>
      <codePool>local</codePool>
       <depends>
        <Mage_Catalog />
       </depends>
    </Custom_Catalog>
   </modules>
</config>