2010-01-29 59 views
0

我正在處理Magento一段時間,我覺得它非常有趣,可能是我未來的工作工具的選擇。雖然我有一些麻煩理解一些正在發生的事情。如果我致電www.store.com/catalog/product/view/id/2,則產品控制器將從目錄核心模塊執行,其中產品將首先通過_initProduct()方法獲取,其中將分派此事件: Magento調度和捕捉事件

Mage::dispatchEvent('catalog_controller_product_init_before', array('controller_action'=>$this));
。 正在調用哪個類/方法?據我瞭解,應該是一個模型文件夾下的觀察員類的方法,它應該在etc/config.xml文件中定義。 config.xml中定義的一些事件會自動執行......(爲什麼?)其中定義了Catalog模塊中ProductController.php的viewAction()中使用的事件?我如何發送和使用數組數據到觀察者的方法,因爲我看到他們中的一些包含這個方法:Mage :: app() - > reinitStores(),它重新存儲商店,組和網站集合,這並不簡單。我覺得這非常強大,我真的很想知道使用觀察者和事件的可能性。

回答

1

可以在config.xml中爲任何在系統中處於活動狀態的模塊定義事件觀察者,它們不一定必須在同一個模塊中定義。

您可以通過向事件對象添加信息來向事件觀察者發送數據,這是在定義爲dispatchEvent的第二個參數的數組中完成的。只需向數組中添加更多元素,事件觀察者方法就可以從$ observer-> getEvent()中提取它。您也可以通過調用相同的dispatchEvent方法來自由定義自己的事件。

關於大多數Magento模型的便利之處之一是它們是從包含_load_after,_save_before,_save_after,_delete_before和_delete_after事件的Mage_Core_Model_Abstract類繼承而來的。例如,產品型號有catalog_product_load_after,catalog_product_save_before等。

希望能夠爲您提供有關使用事件的可能性的更多信息。

+0

謝謝你的回答,有時候很難找到答案,但我非常喜歡Magento,它的組織方式以及可以擴展的方式。我將觀察所有觀察者的可能性,因爲我認爲在某些情況下可以避免重寫核心文件。 – zokibtmkd 2010-02-01 01:36:27