在参考了网上的一些资料后,终于完成了文章内容页生成静态带分页的功能(使用模板),文章内容从哪分页完全由文章添加者自已设定,性能及安全方面未加考虑,呵呵。 1、相关变量参数:
strDir 用于保存.html文件的文件夹路径 htmlwrite FSO对象,用于生成.html文件 arrcontent 按分页标签分割的文章内容数组 InnerPageNum 统计内容的页数 rollnum 当前第(rollnum+1)页 pagelist 分页页码 strTemplate 存放模板内容 strTemp 模板内容备份 $page_break$ 内容分页标签
2、核心代码
'========生成内容静态页====== on Error resume next Set fso = Server.CreateObject("Scripting.FileSystemObject") '=====用于保存静态文件的文件夹路径名称,这里我按自己的项目设定了==== strDir=SITEROOT&"/"&NewsHtmlFile&"/"&year(now)&"-"&month(now) '======生成静态文件保存文件夹===== if not fso.folderexists(Server.MapPath(strDir)) then fso.CreateFolder(Server.MapPath(strDir)) set fso=Nothing if Err=0 then Dim fso,htmlwrite ,arrcontent,InnerPageNum,rollnum,pagelist,strTemplate,strTemp
'===读取模板文件,我前面的文章关于ASP生成静态的,有这个数据表的内容=== sql="SELECT tp_content FROM [KrTemplate] WHERE tp_default=1 AND tp_type='新闻内容页模板'" Set rs=Conn.Execute(sql) if not rs.eof then strTemplate=rs(0) end if rs.close '======备份模板文件,避免模板文件被改写===== strTemp=strTemplate '======文章数据表===== sql="SELECT * FROM [KrNews] WHERE news_html=0 ORDER BY news_date DESC" Set rs=Conn.Execute(sql) '======循环读取所有要生成的文章信息====== do while not rs.eof news_keywords=rs("news_keywords") news_content=rs("news_content") news_tips=rs("news_tips") news_name=rs("news_name") news_from=rs("news_from") news_date=rs("news_date") news_id=rs("news_id")
'====匹配文章内容,如果出现分页标签,则按如下处理,否则按普通生成方法处理=== if Instr(news_content,"$page_break$") then '===如果文章URL要存入数据库,那么这里存入的地址就为文章分页后的第一页的路径, '===即为下面的URL地址加上第一页的标志,我这里存入数据库的地址是这样的 ' ===URL=URL&"_1.html"
URL=SITEURL&strDir&"/news_"&news_id&"" '======对分页信息的预处理=======
'=====将按分页标签分割的文章内容存入数组arrcontent===== arrcontent=split(news_content,"$page_break$") '=====得到文章分割后所得的页数===== InnerPageNum=ubound(arrcontent) pagelist=" "
'=====循环得到页码====== for rollnum=0 to InnerPageNum pagelist=pagelist & "<a href="""&URL&"_"&(rollnum+1)&".html"" target=""_self"">["&(rollnum+1)&"]</a> " next for rollnum=0 to InnerPageNum '======还原被改写的模板,这里不注意会生成相同的文件====== strTemplate=strTemp strTemplate=Replace(strTemplate,"$keywords$",news_keywords) strTemplate=Replace(strTemplate,"$news_tips$",news_tips) ………… '略,其他一样写法
'===替换文章内容,并添加分页页码==== strTemplate=Replace(strTemplate,"$news_content$",arrcontent(rollnum)&"<br><center>分页:"&pagelist&"</center>")
'====要生成的HTML页面路径及名称====== Address=strDir&"/news_"&news_id&"_"&(rollnum+1)&".html" '======调用adodb.stream方法生成静态页面,此为自定义方法,附在文章后面=== WriteToTextFile Address,strTemplate '======(可选择)FSO方法生成静态页面 ' Set fso = Server.CreateObject("Scripting.FileSystemObject") ' Set htmlwrite=fso.CreateTextFile(Server.MapPath(Address),true) '// 创建要生成的静态页 ' htmlwrite.WriteLine strTemplate '// 写入网页内容 ' htmlwrite.close ' set htmlwrite=Nothing ' set fso=Nothing next else strTemplate=Replace(strTemplate,"$keywords$",news_keywords) strTemplate=Replace(strTemplate,"$news_tips$",news_tips) strTemplate=Replace(strTemplate,"$sitename$",SITENAME) …………
strTemplate=Replace(strTemplate,"$news_content$",news_content) Address=strDir&"/news_"&rs("news_id")&".html" WriteToTextFile Address,strTemplate end if rs.movenext loop rs.close end if
'=======ADODB.Stream生成文件函数=========
Sub WriteToTextFile (FileUrl,byval Str) set stm=server.CreateObject("adodb.stream") stm.Type=2 '以本模式读取 stm.mode=3 stm.charset="GB2312" stm.open stm.WriteText str stm.SaveToFile server.MapPath(FileUrl),2 stm.flush stm.Close str="" set stm=nothing End Sub |