Magento调度和捕获事件

时间:2010-01-29 00:29:25

标签: magento

我正在与Magento打交道一段时间,我发现它非常有趣,可能是我未来选择的工作工具。虽然我有些麻烦了解一些正在发生的事情。如果我打电话给www.store.com/catalog/product/view/id/2,那么产品控制器将从目录核心模块执行,其中产品将首先通过_initProduct()方法获取,其中将调度此事件:

Mage::dispatchEvent('catalog_controller_product_init_before', array('controller_action'=>$this));
。 正在调用哪个类/方法?据我所知,应该是一个来自Spectart文件夹下的observer类的方法,它应该在etc / config.xml文件中定义。 config.xml中定义的一些事件是自动执行的...(为什么?)where定义了Catalog模块中ProductController.php中viewAction()中使用的那个?我如何发送和使用数组数据到观察者的方法,因为我看到其中一些包含这种方法:Mage :: app() - > reinitStores()重新进入商店,组和网站集合,这不是简单的事情。我发现这非常强大,我真的想知道使用观察者和事件的可能性。

1 个答案:

答案 0 :(得分:1)

可以在config.xml中为系统中活动的任何模块定义事件观察器,它们不一定必须在同一模块中定义。

您可以通过向事件对象添加信息来向事件观察者发送数据,该信息在定义为dispatchEvent的第二个参数的数组中完成。只需向数组中添加更多元素,事件观察者方法就可以从$ observer-> getEvent()中提取它。您也可以通过调用相同的dispatchEvent方法自由定义自己的事件。

大多数Magento模型的一个方便之处是它们继承自Mage_Core_Model_Abstract类,其中包括_load_after,_save_before,_save_after,_delete_before和_delete_after的事件。例如,产品模型包含catalog_product_load_after,catalog_product_save_before等。

希望能为您提供有关使用事件的可能性的更多信息。