未触发Magento“产品状态更新”事件

时间:2012-01-24 11:19:27

标签: events magento status product

我正在制作一个扩展程序,可以在保存时从Magento接收产品信息并对产品进行自定义处理。

我花了两天时间才弄清楚为什么Magento没有触发事件“catalog_product_status_update”。

简单地说,我通过转到目录 - >管理产品来更改产品状态,然后选择一个或多个产品并使用产品网格上方的“操作”字段将产品状态更改为“已禁用”。

当我这样做时,产品状态变化很好,但问题是我没有收到它的事件。 这是我使用的代码:

<?xml version="1.0"?>
<config>
  <global>
    <models>
        <mage4ucustomredirect>
             <class>Mage4u_Customredirect</class>
        </mage4ucustomredirect>
    </models>
    <events>
       <catalog_product_save_after>
            <observers>
                <abc>
                    <type>singleton</type>
                    <class>Mage4u_Customredirect_Model_Observer</class>
                    <method>on_catalog_product_save_after</method>
                </abc>
            </observers>
       </catalog_product_save_after>
       <catalog_product_status_update>
            <observers>
                <abc>
                    <type>singleton</type>
                    <class>Mage4u_Customredirect_Model_Observer</class>
                    <method>on_catalog_product_status_update</method>
                </abc>
            </observers>
       </catalog_product_status_update>
    </events>
  </global>
</config>

这是观察者:     

class Mage4u_Customredirect_Model_Observer
{
    public function on_catalog_product_status_update(Varien_Event_Observer $observer)
    {  
        Mage::log( "on_catalog_product_status_update" );
    }

    public function on_catalog_product_save_after(Varien_Event_Observer $observer)
    {  
        Mage::log( "on_catalog_product_save_after"  );
    }
}
?>

奇怪的是,当我尝试手动保存产品时,我收到事件“on_catalog_product_save_after”,告诉我我的代码工作正常,但它不适用于此“on_catalog_product_status_update”事件。

感谢任何帮助!

注意:我正在使用Magento v1.6.2.0

2 个答案:

答案 0 :(得分:0)

你的两个观察者的名字是“abc”。这在Magento观察员名单中应该是唯一的。

尝试将其中一个更改为“abc1”,刷新缓存并运行。

答案 1 :(得分:0)

此问题是在2012年的某个地方提出的,但在最近的Magento版本中,产品网格的批量操作更新由catalog/product_action模型处理updateAttributes方法:

Mage_Catalog_Model_Product_Action::updateAttributes() 

在那里发送一个事件:

Mage::dispatchEvent('catalog_product_attribute_update_before', array(
    'attributes_data' => &$attrData,
    'product_ids'   => &$productIds,
    'store_id'      => &$storeId
));

attributes_data是一个键值列表,其中包含要在product_ids范围内store_id存储的数据。在catalog_product_attribute_update_before的观察者中,您可以检查状态属性是否正在更新:

$event = $observer->getEvent();

$attributesData = $event->getData('attributes_data');

if (! isset($attributesData['status'])) {
    // we are not updating the status
    return;
}

// do something, for example - if the product will be disabled
if ($attributesData['status'] != Mage_Catalog_Model_Product_Status::STATUS_ENABLED) {
   // api call
}

希望这有助于任何试图拦截群发状态更新的人。