3

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

观察者.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,
            ));
        }
    }
}

我的模块/我的公司/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>
4

1 回答 1

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,
        ));
    }
}

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>
  1. 您需要使用事件“adminhtml_block_html_before”,因为您使用的事件甚至没有创建表单对象。这就是您无法访问表单对象的原因。
  2. 创建此表单元素的块是“adminhtml/permissions_tab_roleinfo”。
  3. 您使用的方法与观察者中的方法不同。

希望有帮助:)...

干杯,斯瓦普纳

于 2013-02-01T01:43:40.350 回答