簡體   English   中英

如何在magento中創建觀察者

[英]How to create an observer in magento

我創建了一個自定義模塊,當它的控制器稱為“我想讓觀察者擴展功能”時。 假設我的控制器是:

  <?php
    class Test_Mod_IndexController extends Mage_Core_Controller_Front_Action
    {
        public function saveAction()
     {
          // code 
   $dataval =  $this->getRequest()->getParams();
    Mage::dispatchEvent('my_custom_event', $dataval);
      }
    }

這是配置文件:-

<?xml version="1.0"?>
<config>
  <modules>
    <Myobs_Obser>
      <version>0.1.0</version>
    </Myobs_Obser>
  </modules>
    <global>
        <models>
            <obser>
            <class>Myobs_Obser_Model</class>
            </obser>
        </models>
    </global>
 <frontend>
    <events>
        <my_custom_event>
            <observers>
                <Myobs_Obser_my_custom_event_observer>
                    <type>singleton</type>
                    <class>obser/observer</class>
                    <method>my_custom_method</method>
                </Myobs_Obser_my_custom_event_observer>
            </observers>
        </my_custom_event>
    </events>
</frontend>
</config> 

這是觀察者:-

<?php
class Myobs_Obser_Model_Observer
{
 public function my_custom_method($observer)
    {       
        $event = $observer->getEvent();  
                        var_dump($event);
        die;
       }
 }
?>

它不起作用,請幫助我。 謝謝。

使用以下命令更新您的控制器:

<?php
class Test_Mod_IndexController extends Mage_Core_Controller_Front_Action
{
    public function saveAction()
 {
    //creating your own dispatch event
Mage::dispatchEvent(
            'mod_submit_before',
            array('key' => 'value')//parameters to access using observer object in event function parameter
        );

      // code 
  }
}

進行配置條目:

<global>
  ..
  ..
  <events>
    <my_custom_event>
      <observers>
        <namespace_modulename_my_custom_event_observer>
          <type>singleton</type>
          <class>modulename/observer</class>
          <method>my_custom_method</method>
        </namespace_modulename_my_custom_event_observer>
      </observers>
    </my_custom_event>
  </events>
  ..
  ..
</global>

現在在模型中編寫observer.php:

<?php
class Namespace_Modulename_Model_Observer
{
  public function my_custom_method($observer) {
    $event = $observer->getEvent();

    // getter method to fetch cid value passed from the dispatcher
    $cid = $event->getCid();
    echo $cid;
    exit;
  }
}
?>

現在在控制器中調用自定義事件:

<?php
..
$event_data_array  =  array('cid' => '123');
Mage::dispatchEvent('my_custom_event', $event_data_array);
..
?>

我可以在以下幾個方面進行修改:

1) Updated Function : 

    <?php
        class Test_Mod_IndexController extends Mage_Core_Controller_Front_Action
        {
            public function saveAction()
         {
              // code 
       $dataval =  $this->getRequest()->getParams();
// I have changed the 2nd parameter below as a key value pair, you can access the data using reference key "formdata" in your observer function
        Mage::dispatchEvent('my_custom_event', array('formdata' => $dataval));
          }
        }

2)您在Config.xml中的events節點應該在其中,下面是您更新的config.xml

<?xml version="1.0"?>
<config>
  <modules>
    <Myobs_Obser>
      <version>0.1.0</version>
    </Myobs_Obser>
  </modules>
    <global>
        <models>
            <obser>
            <class>Myobs_Obser_Model</class>
            </obser>
        </models>
        <events>
        <my_custom_event>
            <observers>
                <obser>
                    <type>model</type>
                    <class>obser/observer</class>
                    <method>mycustommethod</method><!--Avoiding Undescores in methode name-->
                </obser>
            </observers>
        </my_custom_event>
    </events>
    </global>
</config> 

3)並在以下觀察者函數中進行更新:

<?php
class Myobs_Obser_Model_Observer
{
 public function mycustommethod($observer)
    {       
        $event = $observer->getEvent();  
                        var_dump($event);
        die;
       }
 }
?>

4)最后但不是租約,請確保您的文件權限正確。 :)如果有任何問題,請通知我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM