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

使用magento管理员角色权限中的事件观察者添加网站字段,magento,Magento,我正在创建一个模块,允许用户在创建角色权限时选择网站(系统->权限->角色->添加新角色->角色资源)。我正在使用一个观察者来实现这一点,但是我无法获得表单对象 Observer.php class Mymodule_Mycompany_Model_Observer { public function appendCustomRow(Varien_Event_Observer $observer) { $block = $observer->getEve

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

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

模型
Mymodule\u Mycompany\u Model\u Observer
附加自定义列

我算出来了。下面是一段经过修改的代码

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>

模型
Mymodule\u Mycompany\u Model\u Observer
附加自定义列
  • 您需要使用事件“adminhtml\u block\u html\u before”,因为您使用的事件甚至没有创建表单对象。这就是您无法访问表单对象的原因
  • 创建此表单元素的块是“adminhtml/permissions\u tab\u roleinfo”
  • 您使用的方法与“观察者”中的方法不同
  • 希望有帮助:)

    干杯,
    斯瓦普纳

    太棒了。这正是我需要的。非常感谢你,朋友:)我以为我在活动名称上有问题。现在还有一件事显示在“角色信息”选项卡中。我需要“角色资源”选项卡中的“网站”字段。我该怎么做?它会自动保存值吗?或者我们需要在事件之前通过_saveBefore进行设置?