我们可以使用相同的观察者类来处理全局和magento的前端事件

时间:2014-07-31 11:05:19

标签: magento events adminhtml

我目前正在研究事件观察者模式,我们需要在新闻通讯订阅者块中添加自定义字段名称。我成功完成了前端部分,例如使用安装程序脚本&将自定义字段添加到数据库。添加了用户从前端输入的数据库中的值。

现在我无法在简报网格中的magento admin中显示该自定义字段。

这里是config.xml文件: -

<?xml version="1.0" encoding="UTF-8"?>
    <config>
    <modules>
        <Scandi_Newsletter>
            <version>0.1.0</version>
      </Scandi_Newsletter>
    </modules>
    <global>
    <resources>
            <scandi_newsletter_setup>
            <setup>
                <module>Scandi_Newsletter</module>
                <class>Scandi_Newsletter_Model_Mysql4_Setup</class>
            </setup>
            <connection>
                <use>core_setup</use>
            </connection>
            </scandi_newsletter_setup>
            <newsletter_write>
        <connection>
        <use>core_write</use>
        </connection>
        </newsletter_write>
        <newsletter_read>
        <connection>
        <use>core_read</use>
        </connection>
        </newsletter_read>

        </resources>
         <events>
       <newsletter_subscriber_save_before>
          <observers>
             <scandi_newsletter_model_observer>
                <type>model</type>
                <class>Scandi_Newsletter_Model_Observer</class>
                <method>newsletterSubscriberSaveBefore</method>
            </scandi_newsletter_model_observer>
          </observers>
       </newsletter_subscriber_save_before>
    </events>
    </global>   
    <adminhtml>
    <events>
    <adminhtml_block_html_before>
                <observers>
                    <layout_before>
                        <class>Scandi_Newsletter_Model_Observer</class>
                        <method>addMassAction</method>
                    </layout_before>
                </observers>
        </adminhtml_block_html_before>
            </events>

    </adminhtml>
    </config>

这是我用于Observer.php的代码: -

<?php

        class Scandi_Newsletter_Model_Observer
        {
            public function newsletterSubscriberSaveBefore(Varien_Event_Observer $observer) {

            $subscriber = $observer->getEvent()->getSubscriber();
            $name = Mage::app()->getRequest()->getParam('subscriber_name');
            $subscriber->setSubscriberName($name);
             return $this;

            }

            public function addMassAction($observer)
            {
            echo "i am here"; die;
                $block = $observer->getEvent()->getBlock();
                $block = $observer->getBlock();

            if ($block->getType() == 'adminhtml/newsletter_subscriber_grid') {
                /* @var $block Mage_Adminhtml_Block_Newsletter_Subscriber_Grid */
                $block->addColumnAfter('subscriber_name', array(
                    'header'    => 'Name',
                    'type'      => 'text',
                    'index'     => 'subscriber_name',
                ), 'subscriber_id');
            }
            }
        }

    ?>

我很困惑我们是否可以使用相同的观察者类来处理我目前使用或不使用的多个事件。

如果是,管理员部分的观察员无效。

对此有任何建议???

1 个答案:

答案 0 :(得分:1)

是的,您可以将同一个观察者用于多个事件。但是在每个事件中调用的方法应该是不同的。即

<adminhtml>
     <events>
          <adminhtml_block_html_before>
              <observers>
                <layout_before>
                    <class>Scandi_Newsletter_Model_Observer</class>
                    <method>addMassAction</method>
                </layout_before>
              </observers>
           </adminhtml_block_html_before>
           <another_event_reference>
              <observers>
                <some_other_unique_value>
                    <class>Scandi_Newsletter_Model_Observer</class>
                    <method>someOtherMethod</method>
                </some_other_unique_value>
              </observers>
           </another_event_reference>
     </events>
</adminhtml>

现在您需要在someOtherMethod()内定义addMassAction()Scandi_Newsletter_Model_Observer。多数民众赞成。