在config_admin.asp 加入2个函数如下,目的的是在类别表,生成完整路径的地址,避免在修改具体记录时,重复大量的计算, 耗费服务器资源, 也影响程序执行效率。在类别表, 需要增加一个文本字段FullFolderName,长度是250。
'函数:单条类别记录生成完整路径的地址
function getfullfoldername(id)
dim rootid,typeid,tmp
if id=0 then
tmp=""
exit function
end if
rootid=conn.execute("select rootid from typelist where id="&id)(0)
tmp=conn.execute("select typename from typelist where id="&id)(0)
do while rootid<>0
typeid=rootid
rootid=conn.execute("select rootid from typelist where id="&rootid)(0)
tmp=conn.execute("select typename from typelist where id="&typeid)(0)&">"&tmp
if rootid=0 then exit do
loop
sql="update typelist set fullfoldername='"& tmp &"' where id=" & id
conn.execute sql
end function
'函数:全部类别记录生成完整路径的地址
function getAllfullfoldername()
dim rootid,typeid,tmp
rs.open "select id from typelist order by orderid desc,id",conn,1,1
do while not rs.eof
id=rs("id")
rootid=conn.execute("select rootid from typelist where id="&id)(0)
tmp=conn.execute("select typename from typelist where id="&id)(0)
do while rootid<>0
typeid=rootid
rootid=conn.execute("select rootid from typelist where id="&rootid)(0)
tmp=conn.execute("select typename from typelist where id="&typeid)(0)&">"&tmp
if rootid=0 then exit do
loop
sql="update typelist set fullfoldername='"& tmp &"' where id=" & id
conn.execute sql
rs.movenext
loop
rs.close
end function
创建createfullfoldername.asp,在类别表以前没有生成完整路径的网站, 调用函数getAllfullfoldername,执行生成。文件如下:
<!--#include file="config_admin.asp"-->
<%
call opendb(session(website&"_lang"))
set rs=server.createobject("adodb.recordset")
call getAllfullfoldername
%>
<body>
在TYPELIST表, 完整路径全面更新成功!
</body>
在edittype.asp,调用以上函数getfullfoldername, 生成完整路径的地址。
在行29, 对于新增类别,加入:
'新增类别生成完整路径
getfullfoldername conn.execute("select max(id) from typelist")(0)
修改后代码:
case "add"
btypename=chkstr(request.form("btypename"),1,"Please insert type name")
orderid=chknum(request.form("orderid"),"Index id must be a number")
foldername=chkstr(request.form("foldername"),1,"Please insert type folder name")
foldername=clearstr(foldername)
description=request.form("description")
isshow=request.form("isshow")
conn.execute "insert into typelist(rootid,typename,foldername,description,orderid) values("&rootid&",'"&btypename&"','"&foldername&"','"&description&"',"&orderid&")"
if isexistfolder(server.mappath(webpath(session(website&"_lang"))&getfolder(rootid)&foldername)) =false then call createfolder(server.mappath(webpath(session(website&"_lang"))&getfolder(rootid)&foldername))
'新增类别生成完整路径
getfullfoldername conn.execute("select max(id) from typelist")(0)
修改前代码:
case "add"
btypename=chkstr(request.form("btypename"),1,"Please insert type name")
orderid=chknum(request.form("orderid"),"Index id must be a number")
foldername=chkstr(request.form("foldername"),1,"Please insert type folder name")
foldername=clearstr(foldername)
description=request.form("description")
isshow=request.form("isshow")
conn.execute "insert into typelist(rootid,typename,foldername,description,orderid) values("&rootid&",'"&btypename&"','"&foldername&"','"&description&"',"&orderid&")"
if isexistfolder(server.mappath(webpath(session(website&"_lang"))&getfolder(rootid)&foldername)) =false then call createfolder(server.mappath(webpath(session(website&"_lang"))&getfolder(rootid)&foldername))
在行45, 对于已经存在类别,加入:
'更新完整路径
getfullfoldername id
修改后代码:
case "edit"
id=chkstr(request.form("id"),1,"url error")
btypename=chkstr(request.form("btypename"),1,"Please insert type name")
orderid=chknum(request.form("orderid"),"Index id must be a number")
description=request.form("description")
foldername=chkstr(request.form("foldername"),1,"Please insert main type folder name")
foldername=clearstr(foldername)
rs.open "select * from typelist where id="&id,conn,1,1
if lcase(rs("foldername"))<>lcase(foldername) then
call movefolder(server.mappath(webpath(session(website&"_lang"))&getfolder(id)),server.mappath(webpath(session(website&"_lang"))&getfolder(rootid)&foldername))
end if
rs.close
conn.execute "update typelist set typename='"&btypename&"',foldername='"&foldername&"',orderid="&orderid&",description='"&description&"' where id="&id
if isexistfolder(server.mappath(webpath(session(website&"_lang"))&getfolder(id))) =false then call createfolder(server.mappath(webpath(session(website&"_lang"))&getfolder(id)))
'更新完整路径
getfullfoldername id
修改前代码:
case "edit"
id=chkstr(request.form("id"),1,"url error")
btypename=chkstr(request.form("btypename"),1,"Please insert type name")
orderid=chknum(request.form("orderid"),"Index id must be a number")
description=request.form("description")
foldername=chkstr(request.form("foldername"),1,"Please insert main type folder name")
foldername=clearstr(foldername)
rs.open "select * from typelist where id="&id,conn,1,1
if lcase(rs("foldername"))<>lcase(foldername) then
call movefolder(server.mappath(webpath(session(website&"_lang"))&getfolder(id)),server.mappath(webpath(session(website&"_lang"))&getfolder(rootid)&foldername))
end if
rs.close
conn.execute "update typelist set typename='"&btypename&"',foldername='"&foldername&"',orderid="&orderid&",description='"&description&"' where id="&id
if isexistfolder(server.mappath(webpath(session(website&"_lang"))&getfolder(id))) =false then call createfolder(server.mappath(webpath(session(website&"_lang"))&getfolder(id)))
在editproduct.asp 的行95,修改取出完整路径的方法,本来是计算以后取得路径, 修改以后,直接从记录中取出,没有计算环节,如果有2000个类别,那么很可能有上百万的计算,大大提高程序效率:
修改以后代码:
<select name="typeid">
<%rs.open "select id,fullfoldername from typelist order by orderid desc,id",conn,1,1
do while not rs.eof%>
<option value="<%=rs("id")%>" <%if cint(rs("id"))=cint(typeid) then response.write "selected"%>><%=(rs("fullfoldername"))%></option>
<%rs.movenext
loop
rs.close%>
</select>
原来代码:
<select name="typeid">
<%rs.open "select id from typelist order by orderid desc,id",conn,1,1
do while not rs.eof%>
<option value="<%=rs("id")%>" <%if cint(rs("id"))=cint(typeid) then response.write "selected"%>><%=getfoldername(rs("id"))%></option>
<%rs.movenext
loop
rs.close%>
</select>
这里调用的 函数getfoldername(id),经过复杂的处理和计算,得出路径,原理没有错,但耗费服务器资源,降低程序效率。