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

时间:2012-03-27 20:04:56

标签: php magento

您好我想在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

1 个答案:

答案 0 :(得分:4)

您遇到的问题是因为您在设置表单后调用了parent :: initForm()。这将创建一个新表单并覆盖您传递给的表单 - &gt; 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;
}