对于KingCMS的Feedback一直觉得比较鸡肋,字段少是一点,修改起来特别不方便,这次一个朋友的网站需要用到,于是做了一些修改。
先看看下图:

需要提交的字段特别多,而且这样的表有两个,另一个我就不贴了,大概说一下吧:
相同的部分是顶部的字段,也就是“客户资料”的部分两个表是一样的,下面具体提交的数据有些不一样。于是考虑将下面提交的数据全部放到留言的中的“内容”字段。虽然说FeedBack这个模块是可以复制出来然后再做另一个,但后台查看的时候就不方便了,于是考虑将两个表单提交的数据都是放到一个FeedBack下。如果用过FeedBack就知道,最后使用的文件是,page/feedback1/index.asp,修改这个的话比较麻烦,还需要修改语言包,这样那么多字段,20几个两个表单加起来40几个实在是很多。
于是打算的是用html提交form给asp文件,然后存入数据库,这里有几个问题
- 一是html文件只能用js进行check字段的正确
- 二是asp得到数据后还要check一遍
- 三是错误信息是存在语言包里
- 四是asp还要单独做模板,因为不可以用ssi
- 五是数据存入后返回的问题
现在不是都用ajax对表单字段进行check了么,那我也修改一下让html直接读取asp然后返回错误信息。实际效果如下图,

错误信息都是语言包里的,直接读取过来了,现在来看看代码
<input id="company" style="border-right: 0px; border-top: 0px; border-left: 0px; width: 140px; border-bottom: 0px" name="company" type="text" onblur="javascript:posthtm('/page/Feedback/post.asp?action=check', 'company-show', 'checkid=1&company='+(this.value));"/>
<span id="company-show" class="small-table"></span>
我只贴一个字段就可以了,其他的只是参数不一样,形式都一样。解释一下:posthtm()是kingCMS自带的js函数,经过悟空的解释和对KingCMS其他相应地方的比对,大概知道怎么用了,第一个''里是传递参数的地址,第二个''是返回信息显示的层id,第三个''是传递的具体参数;<span id="company-show" class="small-table"></span>这里显示返回的参数。
写好了这个地方再去做post.asp文件,先直接复制一个index.asp文件
修改顶部
dim fb
set king=new kingcms
king.checkplugin king.path'检查插件安装状态
set fb=new feedback1
select case action
case"check" king_check
case"def" king_def
end select
set fb=nothing
set king=nothing
高亮部分是修改的,原因是把字段检查和字段提交分成两个部分,'/page/Feedback/post.asp?action=check'这个部分提交的action是check,到了asp里就执行case"check" king_check了,接着贴上asp检查数据部分,基本还是参照KingCMS的方式来写的,另外我还加了一个参数,就是checkid=1,注意看注释
sub king_check()
king.nocache
if king.ismethod=false then king.txt king.lang("error/invalid")'
'获得表单的参数
dim checkid,company,dept,name,tel,fax,email
'获得表单的checkid
checkid=form("checkid")
company=form("company")
dept=form("dept")
name=form("name")
tel=form("tel")
fax=form("fax")
email=form("email")
'根据checkid来执行某一段数据检查
dim checktext
select case checkid
case 1
'这里就是company字段的检查了
checktext=king.check("company|6|"&encode(fb.lang("check/company"))&"|4-100")
case 2
checktext=king.check("dept|6|"&encode(fb.lang("check/dept"))&"|2-100")
case 3
checktext=king.check("name|6|"&encode(fb.lang("check/name"))&"|2-30")
case 4
checktext=king.check("tel|6|"&encode(fb.lang("check/tel"))&"|8-30")
case 5
checktext=king.check("fax|6|"&encode(fb.lang("check/fax"))&"|8-30")
case 6
checktext=king.check("email|6|"&encode(fb.lang("check/email"))&"|6-100;email|4|"&encode(fb.lang("check/email")))
end select
if len(checktext)=0 then
king.txt king.lang("√")
else
king.txt king.lang(checktext)
end if
end sub
这样第一步解决了,是对关键字段的检查。数据提交方法类似,但我也碰到一些问题,下次再写了。