我正在制作一个扩展程序,可以在保存时从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
答案 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
}
希望这有助于任何试图拦截群发状态更新的人。