यह आसान है क्योंकि Mage_Core_Controller_Varien_Action बेस क्लास प्री/पोस्ट प्रेषण ईवेंट प्रदान करता है। preDispatch() और postDispatch()
ये विधि में कुछ कार्य करने और सबसे महत्वपूर्ण बात तीन घटनाओं बंद आग:
आप Mage_Core_Controller_Varien_Action वर्ग को खोलने यदि आप दो तरीकों पाते हैं।
controller_action_(pre|post)dispatch
controller_action_(pre|post)dispatch_{{routeName}}
controller_action_(pre|post)dispatch_{{fullActionName}}
पूर्ण क्रिया नाम मार्ग का नाम, नियंत्रक का नाम, और '_' और सभी निचले मामले से अलग किए गए क्रिया का नाम है। (संदर्भ के लिए Mage_Core_Controller_Varien_Action::getFullActionName देखें)
/app/code/local/FilFact/Test/etc/config.xml
<?xml version="1.0"?>
<config>
<modules>
<FilFact_Test>
<version>1.0.0</version>
<FilFact_Test>
</modules>
<global>
<models>
<FilFact_Test>
<class>FilFact_Test_Model</class>
</FilFact_Test>
</models>
</global>
<frontend>
<routers>
<filfact>
<use>standard</use>
<args>
<module>FilFact_Test</module>
<frontName>filfact</frontName>
</args>
</filfact>
</routers>
<events>
<controller_action_predispatch_filfact_index_index>
<observers>
<FilFact_Test>
<class>FilFact_Test/Observer</class>
<method>indexPreDispatch</method>
</FilFact_Test>
</observers>
</controller_action_predispatch_filfact_index_index>
<controller_action_postdispatch_filfact_index_index>
<observers>
<FilFact_Test>
<class>FilFact_Test/Observer</class>
<method>indexPostDispatch</method>
</FilFact_Test>
</observers>
</controller_action_postdispatch_filfact_index_index>
</events>
</frontend>
</config>
/app/code/local/FilFact/Test/Model/Observer.php
<?php
class FilFact_Test_Model_Observer
{
public function indexPreDispatch(Varien_Event_Observer $observer)
{
// TODO: Your code
}
public function indexPostDispatch(Varien_Event_Observer $observer)
{
// TODO: Your code
}
}
स्रोत
2011-09-22 06:42:33
आप दो घटनाएं प्रदान करना चाहते हैं ताकि अन्य मॉड्यूल इन्हें हुक कर सकें, क्या यह सही है? – Simon
हां, और मैं इस तरह का उपयोग करता हूं: कथन जोड़ें: 'Mage :: dispatchEvent (' test_index_index_before_action ', $ डेटा);' इंडेक्स एक्शन के अंदर। लेकिन यह अच्छा नहीं है। नीचे दिया गया जवाब अधिक बेहतर है। – vietean