最近的一个seo项目有一部分是和tag有关的,tag云里面的tag可以分批显示,可以控制在tag/product/list页面,tag云里面要显示哪些哪些tag是可以控制的,同时为了配合seo,tag/product/list页面还要显示当前tag的描述信息。
为了实现这个功能,我的思路是扩展mangento现有的tag功能,给tag新增两个字段
- parent_id控制tag的层级关系
- description tag描述
升级sql脚本
|
|
回到本文的重点,如何把这两个元素加到现有后台tag编辑的地方,能想到的方法是重写Mage_Adminhtml_Block_Tag_Edit_Form
这个类的_prepareForm()方法,把所有的字段用addField()方法重新添加一遍。以前很多次扩展表单我都是这么写的。我觉得我就新加了两个字段,就要把所有字段全部写一遍太傻了,能不能寻找新的突破口,我的想法是获取原始的form,原始的fieldset,在fieldset里面添加新的field。
|
|
$fieldset = ?,我幻想着$form->getFieldset('base_fieldset')
方法,查了一下没有。于是我重新翻了下Varien_Data_Form
,发现了getElement()方法,试了一下OK,一圈下来证明我的想法是可行的,这样可以得到原始的form和fieldset,所以上面代码的完整版为:
|
|
得到原来的form和fieldset后,接下可以给fieldset添加新的field了。
|
|
addField()方法的最后一个参数表示加在哪一个field的后面
总结一下:
不像grid,grid里面新加column有现成的addColumnAfter()方法可以用,扩展form没有现成的方法,需要我们自己动手,找到原始的form和fieldset对象,然后用fieldset对象的addField()方法添加新的元素。原来的自己真的是too young too simple了,都是把旧的元素全部抄一遍,再写新添加的元素。。。