长日志分页有利于加快页面的加载速度,同时也会提高网站PV值。但因对于ASP语法比较生疏,一直没有动手,
到官方论坛找到一个,可惜用起来很不爽,使用该方法后日志页面跑版厉害,侧边栏、页脚经常错位。而且论坛里也有很多人反映这个问题,但无人解决。
没办法,还是得自力更生,搜索引擎真是个好东东,所有的语法都可以马上找到详细说明,经过昨晚二个多小时的奋战,总算解决了跑版的问题。
关键就在于不能将分页符插在 HTML 语法标签对内部,这样会导致分页后语法标签不能成对匹配,首/尾标签就和日志正文以外的标签匹配了,打乱了其它部分正常语法(很多脚本 hacker 就是巧妙地打断语法标签插入代码再补全首尾标签来实现特殊目的的)。
那为什么有些人使用该方法没有问题呢?一个原因是是用了UBB编辑器,UBB编辑器中的标签对比较明显,另一个是使用FCK编辑器份但没有用源代码方式编辑,这两种情况都不大会将分页符插到语法标签对的中间。
知道了原因,实现起来就比较简单,只要补全前后的语法标签就行了。
由于 cls_article.asp 这个文件是修改得比较多的地方,导致 ShowArticle 函数越来越长,不利于维护,将它们做成了两个子函数分别对应 UBB 和 FCK 两处模式,结构清楚点。
本方法解决了
版面错乱的问题、修正分页后只有第一而显示评论的BUG、提供分页和非分页两种阅读方式,同时支持UBB和FCK编辑器。
FCK 分页效果
UBB 分页效果
修改方法及代码下载:
12/17修改:(为当前页面号不可点)
详细:
http://www.tuxw.cn/blog/article.asp?id=129
<%
'*******************************************
' UBB 日志分页
' 修改时间:2007年12月17日
'*******************************************
Sub UBBSplitxx(sUrl)
dim arrContent,Page,PageList,Content,PageCounter,x,xx,uu
Content=highlight(UnCheckStr(UBBCode(HtmlEncode(log_ViewArr(8,0)),mid(log_ViewArr(11,0),1,1),mid(log_ViewArr(11,0),2,1),mid(log_ViewArr(11,0),3,1),mid(log_ViewArr(11,0),4,1),mid(log_ViewArr(11,0),5,1))),keyword)
If InStr(1,cstr(Content),"__page_break__",1)<>0 Then
ArrContent=Split(Content,"__page_break__")
PageCounter=UBound(ArrContent)
If PageCounter > 0 Then
Page=Request.QueryString("pages")
Page=CInt(Page)
If Page<1 Then Page=1
If Page-2>PageCounter Then Page=PageCounter+2
For x=1 To PageCounter+1
uu=sUrl & "&pages=" & x
If Page=x Then
xx=" [<font color='#FF0000'>" & x & "</font>]"
PageList = PageList & xx
Else
xx= x
PageList = PageList & " [<a href='" & uu & "'>" & xx & "</a>]"
End If
Next
uu = sUrl & "&pages=" & x
If Page=PageCounter + 2 Then
xx = " [<font color='#FF0000'>全文阅读</font>]"
PageList = PageList & xx
Else
xx = "全文阅读"
PageList = PageList & " [<a href='" & uu & "'>" & xx & "</a>]"
End If
If Page-1<=PageCounter Then
Content=ArrContent(Page-1)
End If
x = PageCounter + 1
Content=Content & "<hr><div align='right'>共 " & x & " 页:" & PageList & "</div>"
End If
End If
response.write (content)
End Sub%>
<%
'*******************************************
' FCK 日志分页
' 修改时间:2007年12月17日
'*******************************************
Sub FCKSplitxx(sUrl)
dim arrContent,Page,PageList,Content,PageCounter,x,xx,uu
Content=highlight(UnCheckStr(log_ViewArr(8,0)),keyword)
If InStr(1,cstr(Content),"__page_break__",1)<>0 Then
ArrContent=Split(content,"__page_break__")
PageCounter=UBound(ArrContent)
If PageCounter > 0 Then
Page=Request.QueryString("pages")
Page=CInt(Page)
If Page<1 Then Page=1
If Page-2>PageCounter Then Page=PageCounter+2
For x=1 To PageCounter+1
uu=sUrl & "&pages=" & x
If Page=x Then
xx=" [<font color='#FF0000'>" & x & "</font>]"
PageList = PageList & xx
Else
xx= x
PageList = PageList & " [<a href='" & uu & "'>" & xx & "</a>]"
End If
Next
uu = sUrl & "&pages=" & x
If Page=PageCounter + 2 Then
xx = " [<font color='#FF0000'>全文阅读</font>]"
PageList = PageList & xx
Else
xx = "全文阅读"
PageList = PageList & " [<a href='" & uu & "'>" & xx & "</a>]"
End If
If Page-1<=PageCounter Then
Content=ArrContent(Page-1)
If Page=1 Then Content=Content & "</div>"
If Page-1=PageCounter Then C & Content
If Page>1 And Page<=PageCounter Then C & Content & "</div>"
End If
x = PageCounter + 1
Content=Content & "<hr><div align='right'>共 " & x & " 页:" & PageList & "</div>"
End If
End If
response.write(Content)
End Sub%>
[
本帖最后由 tuxw 于 2007-12-17 11:03 编辑 ]