前提:因为最近做了个会议注册类的网站。。有了这方面的心得,更为了完善科汛论坛的技术支持力量做点贡献,,把自己的制作心得贴出来,旨意为普通站长累积经验,用好科汛,用熟科汛,多用科汛。高手请略过。为谢。。。。。。。
第一篇贴子:科汛后台变前台,思路分享,高手略过http://bbs.kesion.com/forumthread-356979.html
第二篇贴子:数据库导出真正的EXCEL文件---附源码http://bbs.kesion.com/forumthread-387250.html
如有部分地方不合适,请管理员放行。
第一步,准备工作,,
如完成批量上传功能,需要服务器支持EXCEL导入的条件,比如服务器需要安装最新的OFFICE,组件服务中放宽EXCEL的读写条件,OBDC中有EXCEL组件,,,,原因很简单,因为需要ASP调用EXCEL,当然需要服务器有EXCEL组件,并且允许进行读写操作。
做好准备工作,即可开始了。。
下面以我做的导入为例,讲一下如何制作批量导入有不对的地方,就指正,共同提高。谢谢。。首页我面对的对象是身边的人,并不一定对网络或源码懂多少,所以在导入之前进行一下叙述。。
我在源码中加入了一个隐藏层,点击批量导入时,显示批量导入层的注意事项。。
在这个页面中,我需要获取当前栏目的ID号,,这个在科汛的标签中有。即{$GetClassID} 。栏目ID传入到下个页面中作为选择导入某个栏目作准备。。我是储存到ID为 NMBJ的变量中,如上图所示。
原打算利用科汛的文件上传功能,但我怎么研究也研究不透他的源码,,,,,就不要用他的了,我就自己根据网上现有的上传功能DIV了一个。下载的附件中有上传源码。
如下图所示。
第二步,打造自己个性的导入界面。。。
科汛后台插件中的批量导入功能文件是 ADMIN/KS.Import.asp 该文件,打开文件不难发现,,文件被分成三部分。Step1 Step2 Step3 就是第一步第二步第三步。。。。当然这个文件是ASP文件,所以显示出来的部分是HTML的。。。你可以做好HTML后的源码,转换成ASP。在贴入KS.Import.asp内,如果你HTML都不懂,那没办法,去学前班吧。
第一步是指定文件导入类型,文件的路径,测试文件,我把改造成如下界面。。。
这一步中,没有选择需要导入哪个栏目,所以我做了二次传递,我自己也研究不出来,只能这么做了。。。意思是指,在一开始获取栏目ID的时候,传给第一步,然后在第一步中我在次传递给第二步。。然后赋值给第二步的选择栏目的表单中。。。看起来复杂,其实加起来,四行代码。我已经把上页传递的值填加进去了,并隐藏了,你可以用DW软件,搜一下mybj,就知道我都填加在什么地方了。。。
搜一下<option value=""111"" selected=""selected"">会议注册(KS_U_hyzc)</option>,,这是选择到哪个模型中,,你可以改成你自己的。。value=""111"" 是模型的ID。。你在后台可以看到你需要导入模型的ID进行替换。
搜一下 /myfile/EXCEL.xls 是刚刚上传的EXCEL文件路径。。根据需要你可以更改。我已经在上传的那些原码里设置了这个路径,如需要更改。请连同那里面的路径一起更改。第二步,主要的操作是,指定导入哪个栏目,选择内容页文件,选择是否自动生成文件名,选择导入的EXCEL文件列表头和数据库哪个列表头对应。。。在完成以上的条件下,我精简了该界面。如下图
当然上述的什么选择栏目,选择内容页文件,,等等,包括一些其他的不需要的。我都已经设定好了,并隐藏起来了。。。在文件中分别是
选择栏目: '===================================栏目ID=====================================
.echo "<tr style='display:none' class='tdbg'><td height='25' align='right' class='clefttitle'>所属栏目:</td><td><label><input type='radio' value='1' name='tidtype'getClass(1)"" checked/>直接导入指定的栏目</label> <br/><label><input type='radio'getClass(2)"" name='tidtype' value='2'>读取数据源的栏目ID</label>"
.echo " </td></tr>"
.echo "<tr style='display:none' class='tdbg' id='stid1'><td height='25' align='right' class='clefttitle'></td><td><select size='1' name='tid1' id='tid1' style='width:160px'>"
.echo "<option value='"&mybj2&"' selected>"&mybj2&"</option></select></td></tr>"
.echo "<tr style='display:none' class='tdbg' id='stid2' style='display:none'><td height='25' align='right' class='clefttitle'></td><td><select name='tid2'><option value='"&mybj2&"' selected>"&mybj2&"</option>"
.echo ShowField("tid")
.echo " </select> =>栏目ID(Tid)*</td></tr>"
'============================================================='"&mybj2&"' selected>"&mybj2&"</option>"即是我传递了二次过来的栏目ID。。mybj2是我自定义的变量。
选择模板
'==================================模板ID=======================================================
.echo "<tr style='display:none' class='tdbg'><td height='25' align='right' class='clefttitle'>绑定模板:</td><td><label><input type='radio' value='1' name='templatetype'getTemplate(1)"" checked/>选择模板并绑定</label> <br/><label><input type='radio'getTemplate(2)"" name='templatetype' value='2'>读取数据源的模板</label></td></tr>"
.echo "<tr style='display:none' class='tdbg' id='stemplate1'><td height='25' align='right' class='clefttitle'></td><td><input id='TemplateID' name='TemplateID' readonly size=20 class='textbox' value=;" & KSCls.Get_KS_T_C("$('#TemplateID')[0]") &" =>模板(TemplateID)*</td></tr>"
.echo "<tr style='display:none' class='tdbg' id='stemplate2' style='display:none'><td height='25' align='right' class='clefttitle'></td><td><select name='templateid2'><option value='0'>-此项不导入-</option>"
.echo ShowField("templateid")
.echo " </select> =>模板(TemplateID)*</td></tr>"
/nr.html即是我指定的模板文件。根据需要自行修改。
'==================================文件名=======================================================
.echo "<tr style='display:none' class='tdbg'><td height='25' align='right' class='clefttitle'>文件名:</td><td><label><input type='radio' value='1' name='Fnametype'getFname(1)"" checked/>自动生成</label> <br/><label><input type='radio'getFname(2)"" name='Fnametype' value='2'>读取数据源的文件名</label>"
.echo " </td></tr>"
.echo "<tr style='display:none' class='tdbg' id='sfname' style='display:none'><td height='25' align='right' class='clefttitle'></td><td><select name='Fname'><option value='0'>-此项不导入-</option>"
.echo ShowField("Fname")
.echo " </select> =>文件名(Fname)*</td></tr>"
'=================================================================================================
文件名也选择成了自动生成。如上代码所示。
注意。。。。以下这段代码
Dim FieldArr,K
FieldArr=KSCls.Get_KS_D_F_P_Arr(ChannelID,"")
If IsArray(FieldArr) Then
For K=0 TO Ubound(FieldArr,2)
.echo "<tr class='tdbg'><td style=""font-size:16px; line-height:16px;font-family:微软雅黑; text-align:right; padding-right:10px;"">" & FieldArr(1,k) & "</td><td height='25' align='right' class='clefttitle'>"
.echo "<select style=""font-size:16px; line-height:16px;width:160px; font-family:微软雅黑; text-align:center; "" border='0' name='" & FieldArr(0,k) & "'><option value='" & FieldArr(1,k) & "' selected>." & FieldArr(1,k) & "-</option>"
.echo ShowField(FieldArr(0,k))
.echo " </select> </td>"
.echo " <td style=""font-size:16px; line-height:16px;font-family:微软雅黑; text-align:left; padding-right:10px;"">=> " & FieldArr(1,k) & "(" & FieldArr(0,k) & ")</td></tr>"
Next
End If
这段的意思是,建立一个变量组,把要批量导入的EXCEL表单每一行都读取出来,并且做成选择,和数据库的值对应起来,科汛的源码不是这样的。科汛的源码是让你选择哪项导入哪项不导入,并且具体到哪个值才是数据库的对应值。。。我怕麻烦,就直接给改动了一下,定位死了。所以EXCEL中的值一定要和数据库的值一样。。。。如果怕和你不一样。我把科汛原来的源码给你贴出来,你可以更换,以下是科汛原来的
Dim FieldArr,K
FieldArr=KSCls.Get_KS_D_F_P_Arr(ChannelID,"")
If IsArray(FieldArr) Then
For K=0 TO Ubound(FieldArr,2)
.echo "<tr class='tdbg'><td style=""font-size:16px; line-height:16px;font-family:微软雅黑; text-align:right; padding-right:10px;"">" & FieldArr(1,k) & "</td><td height='25' align='right' class='clefttitle'>"
.echo " <select style=""font-size:16px; line-height:16px;width:160px; font-family:微软雅黑; text-align:center; "" name='" & FieldArr(0,k) & "'><option value='0' selected>-此项不导入-</option><option value='" & FieldArr(1,k) & "'>" & FieldArr(1,k) & "</option>"
.echo " </select></td>"
.echo " <td> =>" & FieldArr(1,k) & "(" & FieldArr(0,k) & ")</td></tr>"
Next
End If
第三步,就是导入数据的完成情况。如果一切正常,就是显示如下界面。
大功告成。。
从我设想到完成,这些天。遇到不少麻烦。主要是我的功底太差。还需要多多的学习,完善自己,如有不同意思,请给板砖。。。
编后话。
当完成了批量导入的时候,心里那个成就感不要说了。呵呵。开心的嘞。。。。。。。
你有没有发现有漏洞的地方,,,,,呵,有。。就是导入后,源文件还在那个地方,并且还可以点击导入进行导入。这样就造成了重复导入,反而所作的得不偿失。。。因此我在根目录的INDEX.ASP文件,最上方加了如下代码。
<%
dim filename,fs
Set fs = server.CreateObject("scripting.filesystemobject")
'--假设你想让生成的EXCEL文件做如下的存放
filename = Server.MapPath("/myfile/excel.xls")
'--如果原来的EXCEL文件存在的话删除它
if fs.FileExists(filename) then
fs.DeleteFile(filename)
end if
Set fs = nothing
%>
这段的意思是一打开网站,就直接指向那个/myfile/excel.xls 并删除excel.xls,,这样就避免了重复导入的错误。
我把涉及到所文件都放到了压缩包里了。根据个人需要进行修改。
admin/KS.Import.asp 批量导入主文件
save.asp,upload_class.asp 无组件ASP上传文件
IMG 包括图片及CSS文件
template/nm.html 批量导入的入口文件,也是模板文件
MYFILE/模板.EXCEL,EXCEL.xls 分别是EXCEL的模板和已经上传好要导入的EXCEL文件。
收贴,睡觉。
如果有时间,我把在添加栏目时自定义数据库字段的心得贴出来。。。。
以下内容只有回复后才可以浏览,请先登录!