站长朋友们在使用CMS建站的过程中有时候少不了要做一些供用户填写信息的表单,如果是单独去写程序去实现又显得小提大作,或者也显得麻烦,需要创建存储数据的数据表,写数据操作文件及改数据提交表单模板,而CMS的自定义表单功能则能很好的满足这样的需求,不需要太多的编程知识,一路点下一步,添加自定义字段,设置字段的属性,然后选择表单的模板,前台自动生成数据提交表单界面,通过程序自动获取数据字段完成对数据的写入和读取处理,大大简化了表单创建过程,然而实际不同CMS中自定义表单细节考虑的不同,仍然会给站长朋友们尤其是对编程了解不多的朋友带来比较多的困惑。
本文中落叶就PHPCMS、帝国CMS及织梦的自定义表单功能细节作一些对比分析,供大家参考。
自定义表单数据表的创建
建立自定义表单的第一步基本都是提交表单的相关数据如表单名称、表单数据表名、表单介绍、选择表单模板等。
PHPCMS:
DEDECMS:
对比上图所示PHPCMS和DEDECMS表单创建界面,PHPCMS表单可以设置是否开启、开始和结束时间,并且可以设置是否发邮件,这三点附加功能是挺不错的,尤其是表单提交后自动给指定邮箱发邮件的功能,很方便站长及时了解到用户提交的信息。
不过,PHPCMS只能生成表单页,不支持前台对表单数据的直接显示,而DEDECMS中除了可设置表单发布模板,还可通过自定义列表模板、内容模板来对用户提交的表单数据进行展示,同时也可选择是否公开这些数据,优点是方便数据自动展示,缺点时模板不是以选择的方式呈现,而要手动填,一旦 input中默认值被删除,用户不能直观了解到该填哪类模板。
当然,对于数据的展示上,无论是PHPCMS和DEDE中即使没用后台列表模板和发布模板的设置,也可以通过数据调用标签来调用。PHPCMS中使用GET标签调用即可,而DEDE中则可通过SQL标签来调用,不过两者前提是都需要大家了解SQL知识。DEDE的list_diyform.htm中内置了对表单数据的调用,相对更适合新手朋友们,但对于本身对SQL或编程有一些了解的朋友,DEDE这里的设计反而显得局限了。针对数据的调用这块,后面落叶再作详细的分析。
自定义字段添加及设置
PHPCMS:
DEDECMS:
对比二者的自定义字段设置界面发现,二者除了基本的设置字段名称,字段提示文字之外,都内置有对字段内型的设置。和自定义模型一样,字段类型设置的过程其实都整合了表单界面自动生成及数据自动展示过程,用户通过选择不同的字段类型如附件类型,表单界面不需要自己写文件上传功能,会自动生成文件上传框,能够很方便的实现复杂的表单功能。
PHPCMS和织梦数据(字段)类型的区别在于细节设置上。PHPCMS自定义字段类型有单行文本、多行文本、选项、编辑器、日期和时间、数字、图片、地区、文件等,DEDE的字段类型有单行文本、多行文本、HTML文本、整数类型、小数类型、时间类型、使用option下拉框、使用radio选项卡、CHECKBOX多选框、图片、附件类型等。实际二者的字段类型功能模块差不多,该有的都有,只是DEDE的描述似乎不够直观,初级用户不是太易理解,如单行文本(varchar)和单行文本(char),弄不好好多用户都会纠结这俩个有啥区别,varchar是啥,char是啥呢,DEDECMS 中细节提示一向优于PHPCMS,不过这里的处理似乎不够细致,或者DEDECMS认为用到自定义表单的应该都不是初级用户?
另外,PHPCMS中每个字段类型都有详细的设置如前台展示样式、默认值,编辑器宽高等,DEDECMS这里设计则明显过于简略。
自定义表单的调用(引用 )
一般的设计每个自定义表单生成后,都会提供一个独立的访问地址,而实际站长朋友一般不会限满足于自定义表单的独立访问,更希望的是能将表单嵌入到一些特定的页面(如专题页)中,和页面整合在一起。
PHPCMS中提供了很方便的调用功能,即直接在模板中使用{cache_read(1.html)}来调用ID为1的表单,实际是通过 include目录下的global.func.php公共函数文件中的cache_read函数来读到以静态页形式缓存的表单页。这样,表单文件可以很好的以静态HTML的形式整合到目标页面中。
DEDECMS中似乎没有提供很好的表单调用方式。前段时间有程序员在用织梦套站时需要给专题加上评论功能,如果用DEDE的留言板改不太方便通用,所以考虑用DEDE的自定义表单功能来实现,需要将表单界面嵌入到专题页面中来并和专题ID相关联,能够直接在专题页面提交数据和调用数据,这时候发现调用很不方便,最粗糙的方便就是使用IFRAME直接框进去了,但显然这样做让人感觉不太好,好一点的则把表单页以JS的形式输出,以JS的方式引用,或者体验更好一点的是直接通过AJAX来调用了,而实际还是把问题复杂化了。能够写AJAX来操作的,那也基本不会在这样的表单处理的问题上纠结了。
当然,PHPCMS中以缓存方式来调用表单也同样产生了一些新的问题,落叶在实际使用中常遇见表单模板更新了,但表单调用怎么也更新不了的情况,问题则出在缓存更新的问题上,PHPCMS很多的优点源于他的缓存,而也有很多令人纠结的问题也是源于他的缓存。
自定义表单数据的调用
用户通过自定义的表单提交了数据,一些情况站长只希望管理员能在后台看到,而另一些情况,则是希望能对这些数据进行展示,在网站上进行调用。
上面提到过,DEDECMS默认提供了对表单数据进行调用展示的模板,也对数据是否展示作了权限控制。但实际数据展示更多的情况是希望能在网站的页面进行整合,而不仅仅是单页列表,而DEDECMS默认的模板中的数据调用涉及到PHP原生语法,不太适合其它页面的整合,所以需要使用数据调用标签来调用。最直接的那就是SQL标签来调用了:
如调用自定义表单1中的ID为1的数据
{dede:sql sql="Select * from dede_diyform1 where'}
[field:title/]
{/dede:sql}
PHPCMS中的数据调用也基本类似,直接使用GET标签:
{get:sql sql='Select * from phpcms_diyform1 where'}
[field:title/]
{/get}
不同之处在于PHPCMS后台提供了GET标签生成的功能,用户可以方便在后台模板在线管理处通过选择的方式生成SQL语句来调用数据。
作者:落叶(t.qq.com/guohui) 网站:http://www.pmume.com