Magento:向adminhtml表单添加元素(覆盖核心类中的对象)


Magento: Adding element to adminhtml form (Override object in core class)

你好,我想在magento的编辑客户表单中添加一个字段。从功能的角度来看,这个字段只是在我的扩展上做一些事情的触发器。我试图通过重写类来实现这一点,将一个字段集添加到一个新的表单对象中,然后调用父init表单。这不起作用。我想知道如何修改父类上的对象。到目前为止,我有:

            <adminhtml>
            <rewrite>
                <customer_edit_tab_account>Yougento_S2b_Block_Rewrite_Editcustomer</customer_edit_tab_account>
            </rewrite>
        </adminhtml>  

这是为了设置重写,然后我的类(block/rewrite/editcustomer.php)是

    class Namespace_Module_Block_Rewrite_Editcustomer extends Mage_Adminhtml_Block_Customer_Edit_Tab_Account
{
    public function initForm()
    {

        $form = new Varien_Data_Form();
        $fieldset = $form->addFieldset('new_fieldset',
                array('legend'=>Mage::helper('customer')->__('Extra options'))
        );
        $fieldset->addField('newattr', 'text',
            array(
                'label' => Mage::helper('customer')->__('Select type'),
                'class' => 'input-text',
                'name'  => 'newattr',
                'required' => false
            )
        );
        $this->setForm($form);
        return parent::initForm();
    }
}  

我的代码被执行了,但我想当我调用父对象时,新的表单对象会替换新的表单,而不是扩展它。这可能更像是一个php问题,但我认为我会为magento 指定它

您遇到的问题是因为您在设置表单后调用parent::initForm()。这将创建一个新表单并覆盖您传递给->setForm()的表单。

考虑这样写:

public function initForm()
{
    parent::initForm();
    $form = $this->getForm();
    $fieldset = $form->addFieldset('new_fieldset',
            array('legend'=>Mage::helper('customer')->__('Extra options'))
    );
    $fieldset->addField('newattr', 'text',
        array(
            'label' => Mage::helper('customer')->__('Select type'),
            'class' => 'input-text',
            'name'  => 'newattr',
            'required' => false
        )
    );
    $this->setForm($form);
    return $this;
}