2011-09-22 9 views
12

में एक नियंत्रक के एक कार्रवाई के बाद मैं नीचे के रूप में Magento में एक नियंत्रक है:
beforeindex action
:से पहले के लिए घटनाओं जोड़ें/Magento

#File: ./app/local/FilFact/Test/IndexController 
class FilFact_Test_IndexController extends Mage_Core_Controller_Front_Action{ 
    public function indexAction(){ 
     $this->_testConfig(); 
    } 
} 

मैं के लिए दो घटनाओं को जोड़ने की आवश्यकता afterindex action

मैं यह कैसे कर सकता हूं?

+0

आप दो घटनाएं प्रदान करना चाहते हैं ताकि अन्य मॉड्यूल इन्हें हुक कर सकें, क्या यह सही है? – Simon

+0

हां, और मैं इस तरह का उपयोग करता हूं: कथन जोड़ें: 'Mage :: dispatchEvent (' test_index_index_before_action ', $ डेटा);' इंडेक्स एक्शन के अंदर। लेकिन यह अच्छा नहीं है। नीचे दिया गया जवाब अधिक बेहतर है। – vietean

उत्तर

36

यह आसान है क्योंकि 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 
    } 
} 
+1

मैं कोशिश करूंगा। :) अपने जवाब से प्यार करो। – vietean

+0

ग्रेट। मैं मेरे लिए काम करता हूँ लेकिन मुझे नहीं पता कि यह कैसे काम करता है? ^^ – vietean

+3

मैं शामिल करने और स्पष्टीकरण के उत्तर को अपडेट करूंगा। –

संबंधित मुद्दे