2011-09-22 20 views
12

olan bir kontrolörün bir eylem için önce/sonra etkinlik ekleme afterindex actionben aşağıdaki gibi Magento bir kontrol cihazı Magento

Bunu nasıl yapabilirim?

+0

Bu iki olayı, diğer modüllerin bunlara bağlanabilmesi için sağlamanız yeterlidir, doğru mu? – Simon

+0

Evet, Ve şöyle bir yol kullanıyorum: İfadeyi ekleyin: 'Mage :: dispatchEvent ('test_index_index_before_action', $ data);' endeks eyleminin içinde. Ama bu iyi değil. Aşağıdaki cevap daha iyi. – vietean

cevap

36

Mage_Core_Controller_Varien_Action temel sınıfı, gönderim öncesi/sonrası olayları sağladığı için bu basittir. preDispatch() ve

Bu yöntem postDispatch() birkaç görevleri gerçekleştirmek ve en önemlisi üç olayları ateşlemesi: Eğer Mage_Core_Controller_Varien_Action sınıfını açarsanız

iki yöntem bulmak.

controller_action_(pre|post)dispatch 
controller_action_(pre|post)dispatch_{{routeName}} 
controller_action_(pre|post)dispatch_{{fullActionName}} 

fullActionName yol adı, kontrolör adı ve '_' ile ayrılan hareket adı ve daha alt bir durumdur.

/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

(referans için Mage_Core_Controller_Varien_Action::getFullActionName bakınız)
<?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

Denerim. :) Cevabınızı sevin. – vietean

+0

Harika. Benim için çalışıyorum. Ama bilmiyorum nasıl çalışır? ^^ – vietean

+3

Cevabını içerme ve açıklama için güncelleyeceğim. –