菩提猫笔记:XOOPS源码分析之--表单组件浅析(一) |
||||
---|---|---|---|---|
Support Team
注册日期:
2006/3/7 9:41 所属群组:
注册会员 等级: 3; EXP: 31
HP: 0 / 57 MP: 7 / 796 |
菩提猫笔记:XOOPS源码分析之--表单组件浅析(一)
表单是几乎所有WEB开发中都会用到的,生成表单的方法有很多,我先后用过的方法就很杂,有直接echo表单的html代码,pear库的quickform类,还有在模板中使用smarty的html_radios等内置函数,而在开始接触XOOPS的源代码后你会发现,XOOPS居然有一套非常完善的form类,相比较而言XOOPS的表单类更容易使用,完全是面向对象的模式,而且代码更为简洁,控制更为灵活。 这些表单类都保存在XOOPS_ROOT/class/xoopsform目录下,有时间大家可以好好研习一下。 从我目前理解的状况来说,其中有2个是基类,一个是XoopsForm,一个是XoopsElement,其他都是对这2个基类的继承和扩展。下面我们开始简单的剖析其中几个比较常用的类: [一]表单的form类--form.php> 文件定义了XoopsForm基类,XoopsSimpleForm、XoopsTableForm、XoopsThemeForm都是对这个对象的扩展。 1、XoopsForm对象的私有变量
2、XoopsForm对象的成员函数
XoopsForm对象的构造函数,前4个参数对照私有变量的命名很容易理解,其中默认的提交方法是"post",$addtoken这个布尔参数,控制是否要添加一个加密的令牌到form中,我理解是类似于给form增加一个sessionID,防止来自网站之外的恶意提交,默认情况是不添加这个令牌的。
这四组函数很容易理解,分别完成对title,Name,Action,Method的读取(get)和设置(set).
这个函数是比较重要的,它完成form中元素的添加,$formElement是元素对象,$required设置是否这个元素为必添字段,即是否加入校验队列。
这个函数返回form中元素数组,$recurse根据源码注释是控制是否采取递归循环方式生成元素数组,因为这个函数一般比较少用,我没仔细去理解它的源码,不知道解释得对不对。
函数返回所有元素的名称,返回值为数组
根据名称返回相应的元素对象,找不到则返回false;我个人认为这个函数是非常有意义的,可以在已经添加元素后,对它进行修改,当然修改还要用到Element对象的函数。
此函数可以设置form名为$name元素的值,没有返回值
此函数实际上是上一函数的批处理,一次对form多个元素进行赋值,$values是$name/$value对的数组
获得名为$name的form元素值,如果没有设置则返回NULL。
是上一函数的批处理,返回$name/$value对数组。
这个函数也是比较有用的,用于设置form中除name,method,action之外其他的标记,$replace控制是否覆盖原有$_extra,默认为将$extra添加到原有$_extra后面,返回新的$_extra内容
此函数读取form的$_Extra内容。
此函数将&$formElement指向的元素添加到form对象的必添数组$_required中.
此函数返回form对象的必添元素数组$_required
这是个抽象函数,需要在子类定义中覆盖
此函数用于表单最后的渲染输出。
此函数用于Xoops表单内置校验脚本的输出,基本上不会用到。
此函数让表单使用$tpl指向的smarty模板对象,来替代直接显示输出,或者说把现有的form对象传递到smarty模板中,由smarty完成最好的显示输出。 OK,到这儿,基本上XoopsForm对象基本上就描述完了。 下面我们举个简单的例子来看看XoopsForm的基本使用流程
好啦,XoopsForm基本上就是这样了,希望可以对用xoops开发的朋友有所帮助,有时间我会陆续把其他form元素的分析笔记整理发上来,如果有错误的地方,还请大家不吝赐教。 BTW:xoops的开发资料实在是少得可怜 了!
2006/6/10 14:02
|
|||
|
回复: 菩提猫笔记:XOOPS源码分析之--表单组件浅析(一) |
||||
---|---|---|---|---|
Support Team
注册日期:
2005/12/1 9:15 来自 GZ.CN
所属群组:
注册会员 Dev+Hack 等级: 16; EXP: 67
HP: 0 / 391 MP: 106 / 5700 |
非常好~!很详细。
建议文档组的成员把相关内容添加到wiki内。
2006/6/10 21:11
|
|||
|
回复: 菩提猫笔记:XOOPS源码分析之--表单组件浅析(一) |
||||
---|---|---|---|---|
网站管理员
注册日期:
2004/6/25 19:16 所属群组:
网站管理员 注册会员 Dev+Hack 等级: 54; EXP: 77
HP: 806 / 1344 MP: 1983 / 25188 |
建议放到wiki里
2006/6/10 21:11
|
|||
|
回复: 菩提猫笔记:XOOPS源码分析之--表单组件浅析(一) |
||||
---|---|---|---|---|
Support Team
注册日期:
2005/12/1 9:15 来自 GZ.CN
所属群组:
注册会员 Dev+Hack 等级: 16; EXP: 67
HP: 0 / 391 MP: 106 / 5700 |
菩提猫 与你讨论一下:
在你的帖子里,你说曾经用过PEAR::QuickForm库,那QuickForm和XOOPS的Form类有哪些区别呢? 我也用过QuickForm,也在开发XOOPS模块的时候引用QuickForm而不用XoopsForm。但在后来的一些开发里面也用上了XoopsForm。想了解一下你对两者有什么看法?
2006/6/10 22:32
|
|||
|
回复: 菩提猫笔记:XOOPS源码分析之--表单组件浅析(一) |
||||
---|---|---|---|---|
Support Team
注册日期:
2006/3/7 9:41 所属群组:
注册会员 等级: 3; EXP: 31
HP: 0 / 57 MP: 7 / 796 |
确切的讲,我不是个职业的程序员,编程的水平也就是入门,只是在跟程序员沟通不太好的时候,才会自己边学边练地修改程序,呵呵,所以我写得只是个人感受,连建议都算不上。
前些时候自己尝试写一个应用程序的时候,使用到了pear::quickform ,时间也不长,因为文档不是很详细,每个form组件我用的时候都得试验半天,感觉自己可控性不是很好,当时进度比较紧,没有去读quickform的源码,所以应该说只学了一个皮毛,后来因为页面用的是smarty模板,感觉如果用2套方式,还不如直接smarty的form函数更直接些。现在则是在把以前写的那个应用移植到xoops平台下,刚开始这个模块搞了个大杂烩,pear的数据库连接,smarty模板,部分quickform,马马虎虎也算运转起来了。后来得看了很多坛子上的帖子,又读了几个xoops的源码,觉得确实写的很出色(虽然写程序不怎么专业,但代码写得好坏还是能看得出来得,呵呵),参考了一下DJ兄的article,觉得直接用xoopsform其实是最简单的,毕竟引入的东西多了以后,时间一长看着都晕。 我看了xoopsform的源码以后,感觉其实自由度还是比较大,能想到的基本上都可以实现了(当然还有好多源码没看完,不过越看越喜欢),也许pear::quickform也很强大,不过我现在也懒得回去再看他的源码了,反正喜欢那个,熟那个就用那个,个人趋向而已。 另外:mediawiki试了一下,没找到怎么添加页面进去,有点晕,不像dokuwiki简明。看哪位老兄指教一下。
2006/6/11 22:59
|
|||
|
回复: 菩提猫笔记:XOOPS源码分析之--表单组件浅析(一) |
||||
---|---|---|---|---|
Support Team
注册日期:
2005/12/1 9:15 来自 GZ.CN
所属群组:
注册会员 Dev+Hack 等级: 16; EXP: 67
HP: 0 / 391 MP: 106 / 5700 |
引用:
PEAR::QuickForm 和 XoopsForm在表单元素的构建方法都是大同小异,不过QuickForm有一个“验证”功能。在表单生成的同时可以建立每个表单元素的验证规则,当用户提交的时候QuickForm会自动地按照规则去验证表单元素的内容是否符合,不符合的话就会返回并提示出错的信息。在使用Xoops之前,我是用Quickform + adodb进行程序开发,当转移到XOOPS的时候,觉得XoopsForm很容易上手(因为和Quickform构建表单的方式很像),但又觉得用起来不方便,主要就是得自己去建立验证和出错返回这一个步骤。 我也曾经试过大杂烩的方式去做模块~,虽然写的时候很快就出来了,但是到后来再去维护和扩展就发现问题了,主要是程序结构没有设计好。不过,现在有些时候我还是会把QuickForm融合进来,因为有些地方XoopsForm实现不了,比如向Template以数组形式输出,XoopsForm虽然也有这一个功能,但不太好使。曾经向D.J.介绍过QuickForm,也希望XoopsForm可以在未来的版本中融合一些QuickForm的功能。
2006/6/12 10:15
|
|||
|
回复: 菩提猫笔记:XOOPS源码分析之--表单组件浅析(一) |
||||
---|---|---|---|---|
网站管理员
注册日期:
2005/2/24 15:17 所属群组:
网站管理员 注册会员 技术文档组 等级: 24; EXP: 37
HP: 0 / 584 MP: 241 / 9807 |
xoops提供的xoopsForm的确比较灵活强大, 自己在具体开发时候
其实也可以继承xoopsForm来开发自己的Form类.不过大部分都已经 有了,基本就是拿来就用了,超方便!
2006/6/12 10:48
|
|||
_________________
nightcat 小站 不同时刻的访问,有不同的惊喜 小站已经改版,欢迎有事没事来踩踩,内容丰富不少,希望你有喜欢的, Gtalk:[email protected] MSN:[email protected] QQ:1043931 |
||||
|
回复: 菩提猫笔记:XOOPS源码分析之--表单组件浅析(一) |
||||
---|---|---|---|---|
Support Team
注册日期:
2006/3/7 9:41 所属群组:
注册会员 等级: 3; EXP: 31
HP: 0 / 57 MP: 7 / 796 |
引用:
说到PEAR::QuickForm的验证功能,我也是比较欣赏的,当时开始用它也就是因为它这个验证功能,不过使用过程中发现,如果设为客户端验证,好象有时管用有时不管用,不知道跟我用的myIE设置是否有关。看了scottlai的帖,现在回想起来,平心而论,PEAR::QuickForm的验证功能更强一些,而XoopsForm更容易上手,记得pear的文档中讲过,QuickForm也只是给新手用的,如果要更强大的form组件,则可转向HTML_QuickForm_Controller,当然文档也是少的可怜。 不过我现在还是更倾向于xoopsform,以后有机会也会去看看HTML_QuickForm_Controller的实现,或许对xoopsform进行扩充也是个不错的想法。
2006/6/12 17:23
|
|||
|
菩提猫笔记:XOOPS源码分析之--表单组件浅析(二) |
||||
---|---|---|---|---|
Support Team
注册日期:
2006/3/7 9:41 所属群组:
注册会员 等级: 3; EXP: 31
HP: 0 / 57 MP: 7 / 796 |
菩提猫笔记:XOOPS源码分析之--表单组件浅析(二)
上章我把XoopsForm的类定义和成员函数整理了出来,这只是第一步,希望没有读过源码的朋友也会开始喜欢XoopsForm了。本章我会把第2个基础类,也就是XoopsFormElement进行简单分析,form中的checkbox,radio,等等组件都是对这个类的延展,所以弄清XoopsFormElement是如何定义的,将是又一个良好的开端。 【二】表单元素的基类:XoopsFormElement(XOOPS_ROOT/class/xoopsform目录下formelement.php) 1、XoopsElement对象的私有变量
XoopsFormElemen对象的构造函数,其实什么都没定义,每种元素都有各自的定义。
这八组函数很容易理解,分别完成对caption,Name,id,AccessKey,Description等属性的读取(get)和设置(set).
这个函数非常简单,就是返回false,告诉你这个元素不是一个容器。
这个函数是会在$str字符串中寻找你定义的AccessKey,如果找到,就会将第一个找到的AccessKey字符底下画线,说起来比较乱,大家打开软件的文件菜单,你可以看到'新建(N)',对,就是这个意思。假定你设‘N’是你的AccessKey,$str为'新建(N)',这个函数就负责返回给你'新建(N)',不知道我讲明白了没,呵呵。
这个函数这里讲没什么意义,因为一行代码都没写, 到这儿,XoopsFormElement对象讲解就结束了,你肯定觉得这什么都没说啊,没错,我前面讲了,这是个基类,也就搭个架子,具体的元素有各自的定义,基本上也就是在construct函数以及render函数上做文章,但也都是大同小异。 用法:(假定$form = new XoopsThemeForm('标题', '名称', 'action.php');)
下面我们来看几个常用的form元素的构造函数:
参数含义依次为:标题,form中名称,显示宽度(单位为字符数),最大字符数,文本值,ID号。
参数含义依次为:标题,form中名称,文本值,显示行数,显示列数,ID号。
参数含义依次为:标题,值。
参数含义依次为:标题,名称,默认被选择的值,显示大小(如果为1,则显示为下拉框,其他为N行的列表框),是否为多选,ID;
参数含义依次为:标题,名称,默认被选中的值数组,ID;
XoopsFormRadio与XoopsFormCheckBox极为相似,所不同的是XoopsFormCheckBox的$value是数组,而XoopsFormRadio的则是一个值,添加选项的函数是完全一样的。
参数含义依次为:名称,默认值,ID,比较简单
参数含义依次为:标题,form中名称,显示宽度(单位为字符数),最大字符数,文本值;与单行文本字段在操作上没有任何区别;
这个字段应该不需要用到,如果你在创建form对象时,定义$addtoken=true,form对象会自己调用这个函数添加一个$name = 'XOOPS_TOKEN_REQUEST'的隐含字段。
构造按钮的5个参数含义依次是:显示文字,form中的名字,按钮的值,按钮类型(buttion/submit/reset 3个值,默认为button),ID号;默认情况下按钮的css 设定为“formButton”。 OK,到这儿,XoopsForm对象的常用元素就描述完了。 下面我们举个简单的例子来看看XoopsForm的这些元素如何使用,我们还是利用上一章的例子
OK,是不是很简单,只要用几遍,大家都会很喜欢的,呵呵。 XoopsForm常用的元素操作我都列了一下,今天时间比较紧张,不知道有没有错误,谨供大家参考。 有时间我再把其他我的一些使用心得整理一下。
2006/6/12 21:45
|
|||
|
回复: 菩提猫笔记:XOOPS源码分析之--表单组件浅析(二) |
||||
---|---|---|---|---|
Support Team
注册日期:
2005/12/1 9:15 来自 GZ.CN
所属群组:
注册会员 Dev+Hack 等级: 16; EXP: 67
HP: 0 / 391 MP: 106 / 5700 |
支持,继续撰写~我把你写好的文章整理好用PDF发布,作为开发说明书
我用QuickForm的验证都是用服务器端的验证,如果用客户端验证的话安全性不太高。不过用服务器端的验证则需要用户提交之后才能进行。现在有了AJAX,可以考虑一下使用AJAX的方式进行交互验证,效果应该不错的。 QuickForm_Controller功能很强大,但是用起来也很复杂,我曾经尝试使用,但不太成功,也因为缺乏文档,没有去研究它的源码。
2006/6/12 22:34
|
|||
|