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

时间:2012-02-13 03:28:48

标签: magento

改善这个问题: Is it good practice to add own file in lib/Varien/Data/Form/Element folder

接受的答案显示了如何扩展Varien表单元素,但是如果要将其打包到自定义模块中,这将不起作用。

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

更新

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

我想可以在后端检查我的类别块上的文件输入:Mage_Adminhtml_Block_Catalog_Category_Tab_Attributes,然后将表单元素更改为'file'到'mycompany_file' - 但这看起来像解决方法。

有更简单的方法吗?再次感谢Vinai。

2 个答案:

答案 0 :(得分:11)

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

$fieldset->addType('custom', 'Your_Module_Model_Form_Element_Custom');

然后,添加你的元素

$fieldset->addField('the_name', 'custom', $optionsArray);

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

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

在班级Mage_Adminhtml_Block_Widget_Form::_setFieldset()中,有以下代码:

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

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

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

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

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

答案 1 :(得分:1)

您不一定需要在lib / Varien /目录中有一个文件才能扩展它。如果需要向该集合添加元素,则应该能够扩展app / code / local模块中的一个元素。您引用的问题的答案似乎也表明情况就是这样。我将创建自定义字段,扩展其最高级别的功能集(即lib / Varien / Data / Form / Element / File.php)。

如果要覆盖Mage_Adminhtml_Block_Catalog_Category_Tab_Attributes块,则应在模块中扩展该块,然后引用新块。为了兼容性,您可能希望使用事件观察器而不是XML重写来扩展块。