菩提猫笔记:XOOPS源码分析之--表单组件浅析(二) |
||||
---|---|---|---|---|
Support Team
注册日期:
2006/3/7 9:41 所属群组:
注册会员 等级: 3; EXP: 31
HP: 0 / 57 MP: 7 / 143 |
菩提猫笔记: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
注册日期:
2006/3/7 9:41 所属群组:
注册会员 等级: 3; EXP: 31
HP: 0 / 57 MP: 7 / 143 |
引文:
说到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 / 143 |
确切的讲,我不是个职业的程序员,编程的水平也就是入门,只是在跟程序员沟通不太好的时候,才会自己边学边练地修改程序,呵呵,所以我写得只是个人感受,连建议都算不上。
前些时候自己尝试写一个应用程序的时候,使用到了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
注册日期:
2006/3/7 9:41 所属群组:
注册会员 等级: 3; EXP: 31
HP: 0 / 57 MP: 7 / 143 |
菩提猫笔记: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
|
|||
|
回复: 建议倡导模块开发的标准 |
||||
---|---|---|---|---|
Support Team
注册日期:
2006/3/7 9:41 所属群组:
注册会员 等级: 3; EXP: 31
HP: 0 / 57 MP: 7 / 143 |
顶引文:
2006/6/9 11:43
|
|||
|
回复: Xoops文档计划 |
||||
---|---|---|---|---|
Support Team
注册日期:
2006/3/7 9:41 所属群组:
注册会员 等级: 3; EXP: 31
HP: 0 / 57 MP: 7 / 143 |
最近正在学习xoops的form类源码,感觉有必要总结一下,过几天手头的任务完成,会把学习笔记发上来。另外我希望能翻译偏开发方面的文档,不过有时间话也可以帮忙翻译,怎么个操作方式???
2006/6/8 17:52
|
|||
|
回复: xoops 2.014rc1 版本问题 |
||||
---|---|---|---|---|
Support Team
注册日期:
2006/3/7 9:41 所属群组:
注册会员 等级: 3; EXP: 31
HP: 0 / 57 MP: 7 / 143 |
首页是出来了,就是区块标题全都是??
2006/6/6 16:32
|
|||
|
回复: Xoops文档计划 |
||||
---|---|---|---|---|
Support Team
注册日期:
2006/3/7 9:41 所属群组:
注册会员 等级: 3; EXP: 31
HP: 0 / 57 MP: 7 / 143 |
DJ,我希望还是有个模块开发的文档翻译项目,dokuwiki我看到已经有朋友开始了,我前2天也翻译一节,要是改mediawiki,能不能给挪过来,要不以前朋友翻的不白费拉。
2006/6/5 15:59
|
|||
|
回复: XOOPS TEAM [报名处] |
||||
---|---|---|---|---|
Support Team
注册日期:
2006/3/7 9:41 所属群组:
注册会员 等级: 3; EXP: 31
HP: 0 / 57 MP: 7 / 143 |
接触xoops有一、俩个月时间了,从先开始的忧郁不定,到现在很坚定地支持xoops,中间确实走了些弯路,目前尝试在xoops上开发模块,不过xoops确实开发文档不够详细,总站的东东也比较有限。
很希望中国人能放下没意义的成见,一起踏实地做点事情。 不过以我现在的水平,可以进行一些文档翻译,反正也是边学边贡献,呵呵,申请加入文档组吧。等模块开发上路再申请加入支持组吧。
2006/6/5 14:57
|
|||
|
回复: 能否更改图片上传路径,即uploads |
||||
---|---|---|---|---|
Support Team
注册日期:
2006/3/7 9:41 所属群组:
注册会员 等级: 3; EXP: 31
HP: 0 / 57 MP: 7 / 143 |
找到了,
图片上传路径 XOOPS_UPLOAD_PATH :修改/include/common.php define("XOOPS_CACHE_PATH", XOOPS_ROOT_PATH."/cache"); define("XOOPS_UPLOAD_PATH", XOOPS_ROOT_PATH."/xuploads"); define("XOOPS_THEME_PATH", XOOPS_ROOT_PATH."/themes"); define("XOOPS_COMPILE_PATH", XOOPS_ROOT_PATH."/templates_c"); define("XOOPS_THEME_URL", XOOPS_URL."/themes"); define("XOOPS_UPLOAD_URL", XOOPS_URL."/xuploads"); 估计碰上这种情况的朋友不多,不过还是希望xoops能在安装时检查一下这个选项,或者能让自定义 另外: 管理模块中图片管理器还是会显示 “保存成文件(到/uploads/目录)” 这只是显示问题,改不改无所谓,如果实在要改,可以这样: 修改图片管理器中文显示定义 modules\system\language\schinese\admin\images.php define('_MD_ASFILE',' 保存成文件(到/xuploads/目录) '); 如果有模块中定义了自己的上传路径,象articles,那就只能改模块version文件,或是直接修改数据表 例如articels $modversion["config"][] = array( "name" => "path_file", "title" => $GLOBALS["ART_VAR_PREFIXU"]."_MI_PATHFILE", "description" => $GLOBALS["ART_VAR_PREFIXU"]."_MI_PATHFILE_DESC", "formtype" => "textbox", "valuetype" => "text", "default" => "xuploads/".$GLOBALS["artdirname"]."/file", "category" => "module" ); // For utility images: category $modversion["config"][] = array( "name" => "path_image", "title" => $GLOBALS["ART_VAR_PREFIXU"]."_MI_PATHIMAGE", "description" => $GLOBALS["ART_VAR_PREFIXU"]."_MI_PATHIMAGE_DESC", "formtype" => "textbox", "valuetype" => "text", "default" => "xuploads/".$GLOBALS["artdirname"]."/image", "category" => "module" ); 然后更新模块,累 好在估计没几个人遇上象我这么背的问题。 祝大家好运,xoops边学边用!
2006/5/25 17:29
|
|||
|