西部数码主机 | 阿里云主机| 虚拟主机 | 服务器 | 返回乐道官网
当前位置: 主页 > php教程 > magento教程 >

magento给后台表单添加新的元素

时间:2016-02-17 01:26来源: 作者: 点击:
magento最近的一个seo项目有一部分是和tag有关的,tag云里面的tag可以分批显示,可以控制在tag/product/list页面,tag云里面要显示哪些哪些tag是可以控制的,同时为了配合seo,tag/product/list页
magento最近的一个seo项目有一部分是和tag有关的,tag云里面的tag可以分批显示,可以控制在tag/product/list页面,tag云里面要显示哪些哪些tag是可以控制的,同时为了配合seo,tag/product/list页面还要显示当前tag的描述信息。
 
为了实现这个功能,我的思路是扩展mangento现有的tag功能,给tag新增两个字段
 
parent_id控制tag的层级关系
description tag描述
升级sql脚本
 
ALTER TABLE `tag` ADD `parent_id` int(10) unsigned DEFAULT NULL AFTER `tag_id`;
ALTER TABLE `tag_properties` ADD `description` text;
回到本文的重点,如何把这两个元素加到现有后台tag编辑的地方,能想到的方法是重写Mage_Adminhtml_Block_Tag_Edit_Form这个类的_prepareForm()方法,把所有的字段用addField()方法重新添加一遍。以前很多次扩展表单我都是这么写的。我觉得我就新加了两个字段,就要把所有字段全部写一遍太傻了,能不能寻找新的突破口,我的想法是获取原始的form,原始的fieldset,在fieldset里面添加新的field。
 
 
parent::_prepareForm();
$form = $this->getForm();
$fieldset = ?
$fieldset = ?,我幻想着$form->getFieldset('base_fieldset')方法,查了一下没有。于是我重新翻了下varien_data_form类,发现了getElement()方法,试了一下OK,一圈下来证明我的想法是可行的,这样可以得到原始的form和fieldset,所以上面代码的完整版为:
 
 
parent::_prepareForm();
$form = $this->getForm();
$form->getFieldset('base_fieldset');
得到原来的form和fieldset后,接下可以给fieldset添加新的field了。
 
 
$fieldset->addField('parent_id', 'select', array(
'label' => '父标签',
'title' => '父标签',
'name' => 'tag_parent_id',
'value' => $model->getParentId(),
'values' => Core::helper('tagext')->getTagOptionsArray(),
'after_element_html' => ' ' . Core::helper('adminhtml')->__('[GLOBAL]'),
),'name');
 
$fieldset->addField('description', 'editor', array(
    'label'     => '标签描述',
    'title'     => '标签描述',
    'name'      => 'tag_description',
    'style'     => 'width:100%;height:10em',
    'value'     => $model->getDescription(),
    'config'    => Core::getSingleton('cms/wysiwyg_config')->getConfig(),
    'after_element_html' => ' ' . Core::helper('tag')->__('[STORE VIEW]')
),'parent_id');
 
$this->setForm($form);
return $this;
addField()方法的最后一个参数表示加在哪一个field的后面
 
总结一下:
 
不像grid,grid里面新加column有现成的addColumnAfter()方法可以用,扩展form没有现成的方法,需要我们自己动手,找到原始的form和fieldset对象,然后用fieldset对象的addField()方法添加新的元素。原来的自己真的是too young too simple了,都是把旧的元素全部抄一遍,再写新添加的元素。。。
(责任编辑:好模板)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
热点内容