3

ロール権限の作成中にユーザーが Web サイトを選択できるようにするモジュールを作成しています (システム -> 権限 -> ロール -> 新しいロールの追加 -> ロール リソース)。これを実現するためにオブザーバーを使用していますが、フォーム オブジェクトを取得できません。

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>
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 に答える