博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
magento给后台表单添加新的元素
阅读量:6252 次
发布时间:2019-06-22

本文共 1906 字,大约阅读时间需要 6 分钟。

hot3.png

最近的一个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了,都是把旧的元素全部抄一遍,再写新添加的元素。。。

转载于:https://my.oschina.net/pulading1988/blog/272595

你可能感兴趣的文章
matlab足球赛排名问题程序,足球队排名问题及解决方法.doc
查看>>
ubuntu php5-imap,在Ubuntu 11上安装具有IMAP / Kerberos支持的PHP的问题
查看>>
php圣经 源码,基于PHP的圣经读者用剑模块和diatheke
查看>>
php中的$this-%3efetch,Zend DB fetchAll(): where子句數組帶有IN操作符
查看>>
李思琼php,nginx单机1w并发优化
查看>>
怎么手动设置oracle,手把手设置win7系统手动启动Oracle服务的设置方法
查看>>
oracle fk作用,oracle pk&fk
查看>>
oracle裂块是什么意思,Oracle索引块分裂split信息汇总
查看>>
php构造函数创建对象,7.10 构造函数来创建对象
查看>>
oracle解密后台包,oracle9i加密解密包用法
查看>>
oracle数据库nmon日志在哪,oracle技术之nmon使用说明
查看>>
oracle10g实例修改表空间,oracle10g建表空间和修改oracle字符和删除表空间和用户(加 标注)...
查看>>
linux命令语法规则,Linux系统tar命令怎么使用语法规则
查看>>
linux查看服务器静态路由配置,配置Linux静态路由和配置IP
查看>>
linux应用程序使用时钟中断,Linux时钟中断(2.6.23)(三)
查看>>
win7读取linux硬盘序列号,Windows 下获取硬盘序列号
查看>>
linux音频设备接口,OSS--跨平台的音频接口简介
查看>>
华为网卡linux驱动安装,Linux Nvidia显卡驱动安装
查看>>
linux sql撤销,取消请求的sql语句
查看>>
c语言学习 二维指针,二维数组和指针(C语言)
查看>>