扩展自定义模块的Varien表单元素

Zac*_*ler 2 magento

改进这个问题: 在lib/Varien/Data/Form/Element文件夹中添加自己的文件是一种好习惯

接受的答案显示了如何扩展Varien表单元素,但如果要将其打包到自定义模块中,则无法使用.

在模块中扩展Varien表单元素的正确方法是什么?我希望一个简单的XML设置?

更新:

感谢Vinai的回复.虽然这确实有效,但我希望以某种方式扩展表单元素.我的扩展程序使用基本文件表单元素,允许管理员将文件上载到类别.所以,我不是自己直接将表单元素添加到fieldset中.

我想可以在后端检查我的类别块上的文件输入:Mage_Adminhtml_Block_Catalog_Category_Tab_Attributes,然后将表单元素更改为'file'到'mycompany_file' - 但这似乎是一种解决方法.

有没有更简单的方法?再次感谢Vinai.

Vin*_*nai 11

Varien_Data_Form实例上,您可以指定自定义元素类型,如下所示:

$fieldset->addType('custom', 'Your_Module_Model_Form_Element_Custom');
Run Code Online (Sandbox Code Playgroud)

然后,添加您的元素

$fieldset->addField('the_name', 'custom', $optionsArray);
Run Code Online (Sandbox Code Playgroud)

如果您使用的是没有字段集的表单,您也可以在Varien_Data_Form实例上执行相同的操作.

编辑:由于问题中新的其他详细信息,请展开答案.

在课堂上Mage_Adminhtml_Block_Widget_Form::_setFieldset()有以下代码:

$rendererClass  = $attribute->getFrontend()->getInputRendererClass();
if (!empty($rendererClass)) {
    $fieldType  = $inputType . '_' . $attribute->getAttributeCode();
    $fieldset->addType($fieldType, $rendererClass);
}
Run Code Online (Sandbox Code Playgroud)

因此,属性frontend_input_renderer上的属性可用于指定自定义元素类.
此属性可以在表中找到catalog_eav_attribute,幸运的是,它没有为任何类别图像属性设置.

鉴于此,有几种方法可以应用customizaton.

一种选择是使用升级脚本简单地在表中设置元素类.如果entity_type_id和输入类型匹配,则
另一个将使用eav_entity_attribute_load_after事件的观察者并动态设置输入渲染器.

所以它更多地涉及到Magento中的常规类重写,但它很有可能.