ASP文章分页

发布日期:2006-9-9 12:08:45发布者:[ Luffyes]来源:[ CSDN]
说明:
本函数为文章分页,非记录集分页
本函数实现将文章分页显示,并以指定长度显示每一分页
本函数实现不需指定URL,自动更替URL
本函数实现返回多个结果,为:分页链接-文章统计信息-文章内容,由字典实现
如果分页大小大于文章总大小,分页链接将为空.

显示如:
第1页第2页第3页第4页第5页
50,000字/页1/5页共235,289字
正文...

注:显示内容的三个元素可自由变更位置.

附注:
如果您是在查找记录集分页函数,鄙人以前也写过一个,名为"ASPVBScript分页函数byStabx,第三版".
链接: http://blog.csdn.net/btbtd/archive/2006/05/31/765595.aspx

shawl.qiu
2006-09-04
http://blog.csdn.net/btbtd

主内容:分页函数及调用代码
linenum <% dimrs,dic setrs=createObject("adodb.recordset") rs.open"select*fromctatwhereaid=15783",conn 'rs.open"select*fromctatwhereaid=12850",conn setdic=fAtPgnt(rs("content"),50000,request.queryString("apid")) response.writedic("pgnt")&"<br/>" response.writedic("info")&"<br/>" response.writedic("cnt")&"<br/>" setdic=nothing rs.close setrs=nothing functionfAtPgnt(aStr,pSize,rId) '''''''''''''''''''''''''''''''''''''''''''''''''''''' 'ASP通用文章分页函数(非记录集分页),返回多个结果,字典实现Byshawl.qiu ' http://blog.csdn.net/btbtd '2006-09-04 ''''''''''''''''''''''''''' '输入参数说明: 'aStr为要分页的字符串 'pSize为每页大小数字 'rId为URL参数ID,默认为apid,由函数里的rName变量定义 ''''''''''''''''''''''''''' '输出参数说明: 'obj("pgnt")为文章翻页链接 'obj("info")为文章统计信息 'obj("cnt")为文章内容 ''''''''''''''''''''''''''' 'samplecall: ''''''''''''' 'dimrs,dic 'setrs=createObject("adodb.recordset") 'rs.open"select*fromctatwhereaid=15783",conn ' 'setdic=fAtPgnt(rs("content"),50000,request.queryString("apid")) 'response.writedic("pgnt")&"<br/>" 'response.writedic("info")&"<br/>" 'response.writedic("cnt")&"<br/>" 'setdic=nothing ' 'rs.close 'setrs=nothing '''''''''''''''''''''''''''''''''''''''''''''''''''''' ifisNumeric(pSize)=falseorlen(aStr)=0thenexitfunction ifisNull(rId)orrId=""orisNumeric(rId)=falsethenrId=1'如果分页查询ID为空则ID为1 dimaStrLen'取文章总长度的变量 aStrLen=len(aStr) '智能URL字符串替换 dimrqs,url,rName rqs=request.ServerVariables("QUERY_STRING") rName="apid" ifrqs=""then url="?"&rName&"=" elseifinstr(rqs,rName)<>0then url="?"&replace(rqs,rName&"="&rId,"")&rName&"=" else url="?"&replace(rqs,"&"&rName&"="&rId,"")&"&"&rName&"=" endif dimtPg'定义总页数变量 tPg=int(aStrLen/-pSize)*-1 ifrId<1thenrId=1'如果分页查询ID小于1,则为1 ifcLng(rId)>cLng(tPg)thenrId=tPg'如果分页查询ID大于总页数,则为总页数 dimcPg'定义取当前页字符起始位置变量 ifrId=1thencPg=1elsecPg=pSize*(rId-1)+1'读取文章的起始位置 dimdic'定义字典变量 setdic=createObject("scripting.dictionary") ifaStrLen<=pSizethen'如果分页大小大于正文大小时,执行以下操作 dic.add"pgnt",""'增加页面链接到字典 '增加统计信息到字典 dic.add"info",formatNumber(pSize,0)&"字/页"&rid&"/"&tPg&"页共"&_ formatNumber(aStrLen,0)&"字" dic.add"cnt",mid(aStr,1)'增加内容到字典 setfAtPgnt=dic setdic=nothing exitfunction endif dimi,temp,temp1 fori=1totPg '如果当前查询ID=i,则加入高亮CSS类 ifstrComp(rId,i,1)=0thentemp1="class=""hl""" temp=temp&"<ahref="""&url&i&""""&temp1&">第"&i&"页</a>" next dic.add"pgnt",temp'增加页面链接到字典 '增加统计信息到字典 dic.add"info",formatNumber(pSize,0)&"字/页"&rId&"/"&tPg&"页共"&_ formatNumber(aStrLen,0)&"字" dic.add"cnt",mid(aStr,cPg,pSize)'增加文章内容到字典 setfAtPgnt=dic setdic=nothing endfunction'shawl.qiucode' %> 引自: http://www.luffyes.com/articleview/2006-9-9/article_view_302.htm

*********************************************************************************
标题: ASP VBScript 分页函数 by Stabx, 第三版

正文:

QUOTE: <quote></quote>

ASPVBScript分页函数byStabx,第三版

作用:
翻页导航,显示数据请另外处理

说明:
简化简化再简化,只需输入'''///callfPageCount(连接名,每页总数,开始数,号码导航链接数)///'''
详细如:callfPageCount(rs,50,1,10)

本版实现了不需输入URL就可以自动获取URL的功能
文本框翻页功能也实现了智能化,不需指定URL,前提是客户端没关闭JS(相信不会有太多人跟我一样,通常浏览网页都关闭JS,只在调试时使用)
本版尽可能的没用联字符(&),该字符很费时

导航预览:
首页上十上一81828384858687888990下一下十尾页转到:___
50篇/页88/831页共41503篇

shawl.qiu
2006-5-31

CODE:

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'subject:ASPVBScript分页函数byStabx,第三版
'
'writer:Stabx<[email]shawl.qiu@gmail.com[/email]>
'
'blog:http://blog.csdn.net/btbtd/http://btbtd.exblog.jp/
'
'blog/site:Phoenix.GI-P.GI//绿色学院-GreenInstitute
'
'date:2006-5-31
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'简化简化再简化,只需输入'''///callfPageCount(连接名,每页总数,开始数,号码导航链接数)///'''
'本版实现了不需输入URL就可以自动获取URL的功能
'文本框翻页功能也实现了智能化,不需指定URL,前提是客户端没关闭JS(相信不会有太多人跟我一样,通常浏览网页都关闭JS,只在调试时使用)
'本版尽可能的没用联字符(&),该字符很费时
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'使用例子
'samplecall'''//callfPageCount(rs,50,1,10)//'''
'samplecall'''//callfPageCount(otherRSname,50,1,10)//'''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'参数使用说明
''''''''''''''''''''''''''''''''''''''
'rs|数据库表连接名
'repeatnum|每页显示记录总数
'startbynum|从多少开始循环显示
'numlink|显示数字链接导航数目
'''''''''''''''''''''
'全例:callfPageCount(rs,50,1,10)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
functionfPageCount(rs,repeatnum,startbynum,numlink)

toF_="首页"
toP10_="上十"
toP1_="上一"
toN1_="下一"
toN10_="下十"
toL_="尾页"

ifnotrs.eofthen
rrc_=rs.recordcount
endif

if(notrs.eofornotrs.bof)andrrc_>repeatnumthen'记录总数大于每页总数才显示分页链接

rqq_=request.ServerVariables("QUERY_STRING")'获取URL查询串,并筛选所需
pv_=request("pageview")'翻页查询字符
ifrqq_=""then
url="?pageview="
elseifinstr(rqq_,"pageview")<>0then
url="?"&replace(rqq_,"pageview="&pv_,"")&"pageview="'不要试图把pageview=放进replace里
else
url="?"&replace(rqq_,"&pageview="&pv_,"")&"&pageview="'同上
endif

pageview=CInt(Request("pageview"))'读取URL页号
rs.PageSize=repeatnum'定义每页显示记录数

Ifpageview<=0Thenpageview=1'如果pageview小于或等于0,返回值1
Ifpageview>rs.PageCountThenpageview=rs.PageCount'如果pageview大于分页总数,返回分页末页值
rs.AbsolutePage=pageview'定义当前页码

cPageNo=rs.AbsolutePage
tpagecount=rs.pagecount

IfcPageNo<1ThencPageNo=1'如果页数小于1,默认为1;当前页,cPageNo=CurrentPageNO.
IftPageCount<1ThentPageCount=1
IfcPageNo>tPageCountThencPageNo=tPageCount
DimNaviLength
NaviLength=numlink'显示数字链接数
DimStartPage,EndPage'定义当前页,开始页,结束页
StartPage=(cPageNo/NaviLength)*NaviLength+1'为开始页赋值

ifpageview=1then'判断是否首页,如果是首页不添加链接,反之添加.
Response.Write"<fontcolor=""#CCCCCC"">"
response.writetoF_
response.write"</font>"
Else
Response.Write"<ahref="""
response.writeurl
response.write"1#anchor"">"
response.writetoF_
response.write"</a>"
EndIf

If(cPageNoModNaviLength)=0ThenStartPage=StartPage-NaviLength
EndPage=StartPage+NaviLength-1
IfEndPage>tPageCountThenEndPage=tPageCount

IfStartPage>1Then'向后移动一分页,十页为一分页,并且以1,11,21...为每页的开始页数
Response.Write"<ahref="""
response.writeurl
response.write(cPageNo-(cPageNomod10)-NaviLength+1)
response.write"#anchor"">"
response.writetoP10_
response.write"</a>"
Else
Response.Write"<fontcolor=""#CCCCCC"">"
response.writetoP10_
response.write"</font>"
EndIf

Ifpageview<>1andpageview<>0Then'后移一页
Response.Write"<ahref="""
response.writeurl
response.write(pageview-1)
response.write"#anchor"">"
response.writetoP1_
response.write"</a>"
Else
Response.Write"<fontcolor=""#CCCCCC"">"
response.writetoP1_
response.write"</font>"
EndIf

Forstartbynum=StartPageToEndPage
Ifstartbynum=cPageNoThen
Response.Write"<bclass=""gray"">"
response.writestartbynum
response.write"</b>"
Else
Response.Write"<ahref="""
response.writeurl
response.writestartbynum
response.write"#anchor"">"
response.writestartbynum
response.write"</a>"
EndIf
Next

Ifpageview<>rs.PageCountandpageview<>0Then'前移一页
Response.Write"<ahref="""
response.writeurl
response.write(pageview+1)
response.write"#anchor"">"
response.writetoN1_
response.write"</a>"
Else
Response.Write"<fontcolor=""#CCCCCC"">"
response.writetoN1_
response.write"</font>"
EndIf

IfEndPage<tpagecountThen'向前移动一分页,十页为一分页,并且以1,11,21为每页的开始页数
Response.Write"<ahref="""
response.writeurl
response.write(cPageNo-(cPageNomod10)+NaviLength+1)
response.write"#anchor"">"
response.writetoN10_
response.write"</a>"
Else
Response.Write"<fontcolor=""#CCCCCC"">"
response.writetoN10_
response.write"</font>"
EndIf

ifrs.PageCount<>pageviewthen'判断是否尾页
Response.Write"<ahref="""
response.writeurl
response.writetpagecount
response.write"#anchor"">"
response.writetoL_
response.write"</a>"
Else
Response.Write"<fontcolor=""#CCCCCC"">"
response.writetoL_
response.write"</font>"
EndIf
response.write"转到:<inputTYPE=""text""class= ""jumpinput""onMouseMove=""this.focus();this.select();""οnkeypress=""ckKeyPress(this.value);""><br/>"
'页面信息
response.writerepeatnum
response.write"篇/页"
response.writecPageNo
response.write"/"
response.writetPageCount
response.write"页共"
response.writerrc_
response.write"篇<script>functionckKeyPress(jumpto){if (window.event.keyCode==13){window.location.href="""
response.writeurl
response.write"""+jumpto+""#anchor""}}</script>"
elseif(notrs.eofornotrs.bof)andrrc_<=repeatnumthen
response.write"<divclass=font12px>共"
response.writerrc_
response.write"篇</div>"
endif
endfunction


*********************************************************************************

对一篇很长的文章做到完美的分页输出

利用统计文章字数,然后达到一定字数就截断输出,但是分页的内容就会在莫名其妙的地方截断,不是很友好。 很简单,在要截断的地方附近找下面的符号:
;’”?。!;'".!
如果后面存在<p>或<br>就分页。主要是要研究文章的格式。

<%
if Request.ServerVariables("Content_Length") > 0 then
content = Request.Form("textarea1")

PageLength = 1000 '每页字数
CLength = Len(content)
PageCount = Int(Clength/PageLength) + 1 '计算页数

dim PageArray
redim PageArray(PageCount)

Seperator = Array(chr(13),chr(10),"。","!","?",";",",","”","’") '分隔符

PageArray(0) = 0
Pos = 0
for j=0 to ubound(Seperator)
Pos = instr(PageArray(i)+900,content,Seperator(j)) 'PageArray(i)+900 附近位置是100字,1-999可调
while Pos > 0 and Pos < (i+1)*PageLength and Pos > i*PageLength
PageArray(i) = Pos
Pos = instr(Pos+PageLength,content,Seperator(j))
wend

if PageArray(i) > 0 then
Response.Write "0:i&brvbar; "&PageArray(i)&"<br>"&j&":j"&Seperator(j)&"<br>"
j = j + ubound(Seperator) + 1
end if
next

for i=1 to PageCount-1
PageArray(i) = 0
Pos = 0
for j=0 to ubound(Seperator)
Pos = instr(PageArray(i-1)+950,content,Seperator(j))
while Pos > 0 and Pos < (i+1)*PageLength and Pos > i*PageLength
PageArray(i) = Pos
Pos = instr(Pos+PageLength,content,Seperator(j))
wend

if PageArray(i) > 0 then
Response.Write i&":i&brvbar; "&PageArray(i)&"<br>"&j&":j"&Seperator(j)&"<br>"
j = j + ubound(Seperator) + 1
end if
next
next

output = mid(content,1,PageArray(0))
output = replace(output,chr(13),"<br>")
Response.Write "<br><br>第1段<br>"
Response.Write output

for i=1 to PageCount-2
output = mid(content,PageArray(i-1)+1,PageArray(i)-PageArray(i-1))
output = replace(output,chr(13),"<br>")
Response.Write "<br><br>第"&i+1&"段<br>"
Response.Write output
next

'最后一段的输出就没写了

else
%>
<FORM action="" method=POST id=form1 name=form1>
<TEXTAREA rows=70 cols=120 id=textarea1 name=textarea1>
</TEXTAREA>
<INPUT type="submit" value="Submit" id=submit1 name=submit1>
</FORM>
<%end if%>

***************************************************************************
文章内容分页

摘自 凌枫的blog

解决文章内容自动分页,不需要在后台插入标志什么的 ... ...
已经在单位的业务产品中使用了,估计能给用户不少方便吧,至少录入的内容可以增加一些了... ... :>>>

Function c2u(myText)
Dim i
c2u = ""
For i = 1 to Len(myText)
c2u = c2u & "&#x" & Hex(AscW(Mid(myText, i, 1))) & ";"
Next
End Function

Function cutStr(str,strlen)
'去掉所有HTML标记
Dim re
Set re=new RegExp
re.IgnoreCase =True
re.Global=True
re.Pattern="<(.[^>]*)>"
str=re.Replace(str,"")
set re=Nothing
Dim l,t,c,i
l=Len(str)
t=0
For i=1 to l
c=Abs(Asc(Mid(str,i,1)))
If c>255 Then
t=t+2
Else
t=t+1
End If
If t>=strlen Then
cutStr=left(str,i)&"..."
Exit For
Else
cutStr=str
End If
Next
cutStr=Replace(cutStr,chr(10),"")
cutStr=Replace(cutStr,chr(13),"")
End Function

Function converttowide(str)
Dim strlen
Dim position
Dim convertstr
if isnull(str) then
converttowide=str
else
position=1
strlen=Len(str)
For i=1 To strlen
convertstr=convertstr+"&#x"+Hex(AscW(Mid(str,position,1)))+";"
position=position+1
Next
converttowide=convertstr
end if
End Function

dim topicx,usernamex,addtimex,logtextx,ispassword
'获取ID号
articleid=request("articleid")
'写执行语句
strSQL = "select * from article where articleid="&articleid&""
'接上面函数
logtextx=cutStr(rs("content"),5000)
'开始分页
dim page,PageLength,CLength,PageCount,wen,a
if Request("Page")<>"" then Page = CLng(Request("Page"))
PageLength = 80
CLength = Len(logtextx)
PageCount = Int(Clength/PageLength) + 1
if Page < 1 or IsNull(Page) Then Page = 1
if Page > PageCount Then Page = PageCount
if page=1 then
a=1
elseif page>1 then
a=(Page-1)*PageLength
end if
wen=Mid(logtextx,a,PageLength)
'判断
if page="" or page=1 then
'开始显示内容
Response.write (c2u("内容:"))
end if
Response.write (converttowide(wen))
Response.write "<br/>"
Response.write (converttowide("本文字数:")) & CLength &"<br/>"
Response.write (c2u("本文被分为")) & PageCount & (converttowide("页"))&""&c2u("当前为"&Page&"页")&"<br/>"
if PageCount >1 and page <> 1 then
Response.write "<a href="/"showarticle.asp?articleid="&articleid&"&Page=1"">1</a>"
end if
dim j
For j=Page+1 To Page+10
if j <= PageCount-1 then
Response.write "<a href="/"showarticle.asp?articleid="&articleid&"&Page="&j&""">"&j&"</a>"
end if
next
if PageCount >1 and Page <> PageCount then
Response.write "<a href="/"showarticle.asp?articleid="&articleid&"&Page="&PageCount&""">"&PageCount&"</a><br/>"
End if
'结束
以上代码在WIN2000+IIS5、WIN2003+IIS6 上执行通过

***************************************************************************

上一篇 下一篇 的链接

<%
sql="select top 1 标题,id from 文章 where id<"&本文章ID&" order by id desc"
set rs=conn.execute(sql)
if rs.eof then
response.write "上一篇文章:没有了"
else
response.write "上一篇文章: <a href=显示页.asp?id="&rs("id")">"&rs("标题")&"</a>"
end if
sql="select top 1 标题,id from 文章 where id>"&本文章ID&" order by id asc"
set rs=conn.execute(sql)
if rs.eof then
response.write "下一篇文章:没有了"
else
response.write "下一篇文章:<a href=显示页.asp?id="&rs("id")">"&rs("标题")&"</a>"
end if
%>

*************************************************************************************

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值