0

I am currently working on Event observer pattern where we need to add custom field name to newsletter subscriber block. I am successfully done with the frontend part like adding the custom field to database using installer script & added the value in database entered by user from frontend.

Now I am stuck with displaying that custom field in magento admin in newsletter grid.

Here goes the config.xml file for this:-

<?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>

This is the code I am using for 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');
            }
            }
        }

    ?>

I am confused with whether we can use same observer class for multiple events like I am using currently or not.

If yes,observer for admin part is not working.

Any suggestions on that???

shweta_kaushish
  • 141
  • 1
  • 3
  • 17

1 Answers1

1

Yes you can use same observer for multiple events. But the method invoked in each event should be defferent. ie

<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>

Now you need to define someOtherMethod() and addMassAction() inside Scandi_Newsletter_Model_Observer. Thats it.

Rajeev K Tomy
  • 2,206
  • 1
  • 18
  • 35
  • I have updated my config.xml.I have done it with the same way as suggested by you.Please have a look if you can analyze any issue with the xml. – shweta_kaushish Jul 31 '14 at 11:49
  • please provide full config file. I cannot see you model definition in your config file now. And are you sure your other event is working ? – Rajeev K Tomy Jul 31 '14 at 12:08
  • It's working now...All problem was Cache issue..Hey programmer_rkt thanks for your time reviewing my code!! – shweta_kaushish Jul 31 '14 at 12:14