使用magento admin角色权限中的事件观察者添加网站字段

Pal*_*mar 3 magento

我正在创建一个模块,允许用户在创建角色权限期间选择网站(系统 - >权限 - >角色 - >添加新角色 - >角色资源).我正在使用观察者来实现这一点,但是我无法获得表单对象.

Observer.php

class Mymodule_Mycompany_Model_Observer 
{ 
    public function appendCustomRow(Varien_Event_Observer $observer)
    {
        $block = $observer->getEvent()->getBlock();
        if (!isset($block)) {
            return $this;
        }
        if ($block->getType() == 'adminhtml/permissions_editroles') {       
            //get form instance
            $form = $observer->getEvent()->getForm();
            //create new custom fieldset 'website'
            $fieldset = $form->addFieldset('website', array(
                'legend' => 'Website Extras',
                'class' => 'fieldset-wide'
                )
            );
            //add new field
            $fieldset->addField('website', 'text', array(
                'name'      => 'website',
                'label'     => Mage::helper('adminhtml')->__('Website'),
                'title'     => Mage::helper('adminhtml')->__('Website'),
                'disabled'  => false,
            ));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Mymodule中/ myCompany中的/ etc/config.xml中

<adminhtml>
         <events>
            <core_block_abstract_prepare_layout_before>
                <observers>
                    <Event_column_append>
                        <type>model</type>
                        <class>Mymodule_Mycompany_Model_Observer</class>
                        <method>appendCustomColumn</method>
                    </Event_column_append>
                </observers>
            </core_block_abstract_prepare_layout_before>
          </events>
</adminhtml>
Run Code Online (Sandbox Code Playgroud)

小智 7

我把它解决了.以下是经过修改的代码片段

public function appendCustomColumn(Varien_Event_Observer $observer)
{
    $block = $observer->getEvent()->getBlock();
    if (!isset($block)) {
        return $this;
    }
    if ($block->getType() == 'adminhtml/permissions_tab_roleinfo') {       
        //get form instance
        $form = $block->getForm();
        //create new custom fieldset 'website'
        $fieldset = $form->addFieldset(
            'website_field', 
            array(
                'legend' => 'Website Extras',
                'class' => 'fieldset-wide'
            )
        );
        //add new field
        $fieldset->addField('website', 'text', array(
            'name'      => 'website',
            'label'     => Mage::helper('adminhtml')->__('Website'),
            'title'     => Mage::helper('adminhtml')->__('Website'),
            'disabled'  => false,
        ));
    }
}
Run Code Online (Sandbox Code Playgroud)

XML配置:

<events>
    <adminhtml_block_html_before>
        <observers>
            <Event_column_append>
                <type>model</type>
                <class>Mymodule_Mycompany_Model_Observer</class>
                <method>appendCustomColumn</method>
            </Event_column_append>
        </observers>
    </adminhtml_block_html_before>
</events>
Run Code Online (Sandbox Code Playgroud)
  1. 您需要使用事件'adminhtml_block_html_before'作为您正在使用的事件甚至没有创建表单对象.这就是您无法访问表单对象的原因.
  2. 创建此表单元素的块是'adminhtml/permissions_tab_roleinfo'.
  3. 您使用的方法与观察者中的方法不同.

希望有所帮助:)...

干杯,Swapna