n年前写的东西了。现在在网上扒拉回来。当时准备写二的怎么就放弃了。快了。通过学习.net和深入研究正则,现在对之的理解认识深了一个层次了。等.net版本的有雏形了。就写个二出来。 序:一直断断续续的写着这个东西。无奈网上对于这方面的文章很少,所以这里都是就谈谈个人制作过程中经验想法,仅供参考,如果有什么错误尽请指正。本意旨在抛砖引玉,希望有这方面经验的朋友共同探讨。这里主要对个人思路的阐述,文字表达能力不是很好,见谅。 <cms:loop target='sort' name='allsort' cols='' rows='0'> <table width="400" border="0" cellspacing="1" cellpadding="0" style="border: 1px solid #999999;"> <tr> <td bgcolor="#CCCCCC"><a href="<cms:urlsort>"><cms:sortname></a></td> </tr> <tr> <td height="1" bgcolor="#666666"></td> </tr> <tr> <td bgcolor="#CCCCCC"> <cms:loop taget='article' cols='10' name='articel'> ·<a href="<cms:urltitle>"><cms:title lenth='20'></a><font color="#666666"><cms:date></font><br> </cms:loop name='articel'> </td> </tr> </table> </cms:loop name='allsort'> 这是一个循环显示所有子栏目及子栏目下10条记录的模板文件其中<cms:***>即系统提供的标签。根据这些标签 我们经常在浏览网站时看到 ***.com/news/2004/06/08/2314342.html 今天就主要说说第一步:创建队列 2)那么收到这个队列集合后呢,就该逐个根据ID好到数据库中去找该记录的相关参数来创建页面了。这里使用每自动刷新一次页面创建一个文件,应为如果一次要创建的文件很多的话一次性程序长期大量的占用CPU是不科学的,而且很可能脚本超时。 这里先张贴两个代码片断再做讲解。 <!-- #include file="_INC/Conn.asp" --> Const spaceTime = 8 DIM FSO,WTO,FDER,SERVER_NAME DBOpen() Set FSO = Server.CreateObject("Scripting.FileSystemObject") Call Main() Set FSO = Nothing DBClose() '****************** '*******subs******* '****************** DIM Global_Childs,Global_PageCutNum 'Global variables,used by morethan one function Sub Main() DIM rsPrv,sqlPrv,j,k,Come DIM Alignment,cStep,Steps,StepArr,CurrentStep,PrvPageCutNum Global_PageCutNum = Request("Page") cStep = Request("cStep") Steps = Request("Steps") Alignment = Request("Queue") '控制上页进度调显示 If Steps <> 0 Then DIM percent percent = Int(cStep/Steps*100) Response.Write("<script>parent.percent.width='"&percent&"%'</script>") End If '#中断? '判断创建过程是否完成 If Int(cStep) = Int(Steps) and Steps <> "" Then PrintInfo("<font color=red>全部创建完毕:</font> 共创建网页文件 "&Session("totalfiles")&"个; 耗时 "& FormatNumber((timer()-Session("StartTime"))*1000,3)&"毫秒") Session("totalfiles") = "" Session("StartTime") = "" Exit Sub End If '第一次没有接收到创建队列,默认为创建全部内容,创建全队列 If Alignment = "" Then Call Alignment_All() '取得当前进度及值 If Steps = "" Then Steps = uBound(StepArr) + 1 'Run once only If Session("totalfiles") = "" Then Session("totalfiles") = uBound(StepArr) CurrentStep = StepArr(cStep) Set StepArr = nothing '根据ID值大于0为创建栏目,负数为创建文章页面文件 DIM SortID,Forder,StorePath,ParentPath,Templet If Int(CurrentStep) > -1 Then Set rsPrv = Conn.ExeCute("Select * From ["& OP_TABLE_CLASS& "] Where SortID="& CurrentStep) SortID = rsPrv("SortID") Templet = rsPrv("Templet") Forder = rsPrv("ForderName") 'The sort's storepath just like it's fordername Global_Childs = rsPrv("Childs") ParentPath = rsPrv("ParentPath") rsRemove(rsPrv) If Global_PageCutNum = "" Then Call Creat_Forders(Forder) '建立对象,调用创建文件主函数,并取得是分页与否参数 DIM myCreat,PageCutNum Set myCreat = New Creat myCreat.SortID = SortID myCreat.Templet = Templet myCreat.StorePath = Forder myCreat.ParentPath = ParentPath myCreat.reg = "<cms:loop>"'循环功能目前只定义在非终极页面中 myCreat.CreatClass() PrvPageCutNum = myCreat.PageCutNum'判断是否进入分页流程 Set myCreat = Nothing Else '小于0为创建文章页面 DIM TempletSun,ID '文章ID记录为负数,转换为正数 ID = Int(CurrentStep)*-1 Set rsPrv = Conn.ExeCute("Select A.ID,S.TempletSun From ["& OP_TABLE_ARTICLE &"] A inner join ["& OP_TABLE_CLASS &"] S on S.SortID=A.SortID where A.ID="&ID) TempletSun = rsPrv("TempletSun") rsRemove(rsPrv) Call CreatFinal(ID,TempletSun) End If '#中断 '参数传递进入下一次创建 Response.Write("<body onUnload='Creating.submit()'>") Response.Write("<form method='post' name='Creating'><input type='hidden' name='Come' value='"&Come&"'><input type='hidden' name='cStep' value='"&cStep&"'><input name='Steps' type='hidden' value='"&Steps&"'><input type='hidden' name='Page' value='"&PrvPageCutNum&"'><input type='hidden' name='Queue' value='"&Alignment&"'></form>") Response.Write("<meta http-equiv='refresh' content="&spaceTime&";url='LIB_Creat.asp'>") 代码最后部分,这里输出一些HTML内容。 总结:将要创建的文件ID号组成队列结合交由创建函数对其逐个生成,队列中正数表示栏目ID负数表示文章ID。为了保证资源的占用,通过每刷新一次页面访问该函数来生成文件。 |