ASP文章分页

来源:互联网 发布:js实现div的放大缩小 编辑:程序博客网 时间:2024/06/03 18:25
发布日期:2006-9-9 12:08:45 发布者:[Luffyes]  来源:[CSDN]
说明: 
本函数为文章分页, 非记录集分页
本函数实现将文章分页显示, 并以指定长度显示每一分页
本函数实现不需指定 URL, 自动更替 URL
本函数实现返回多个结果, 为: 分页链接-文章统计信息-文章内容, 由字典实现
如果分页大小大于文章总大小, 分页链接将为空.

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

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

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

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

主内容: 分页函数及调用代码
    linenum
  1. <% 
  2.     dim rs, dic
  3.     set rs=createObject("adodb.recordset")
  4.         rs.open "select * from ctat where aid=15783",conn
  5.         'rs.open "select * from ctat where aid=12850",conn
  6.  
  7.         set dic=fAtPgnt(rs("content"),50000,request.queryString("apid"))
  8.             response.write dic("pgnt")&"<br/>"
  9.             response.write dic("info")&"<br/>"
  10.             response.write dic("cnt")&"<br/>"
  11.         set dic=nothing
  12.         rs.close
  13.     set rs=nothing
  14.  
  15.     function fAtPgnt(aStr,pSize,rId)
  16.     ''''''''''''''''''''''''''''''''''''''''''''''''''''''
  17.     'ASP 通用文章分页函数(非记录集分页), 返回多个结果, 字典实现 By shawl.qiu
  18.     ' http://blog.csdn.net/btbtd
  19.     '2006-09-04
  20.     '''''''''''''''''''''''''''
  21.     '输入参数说明:
  22.     'aStr 为要分页的字符串
  23.     'pSize 为每页大小数字
  24.     'rId 为 URL 参数 ID, 默认为 apid, 由函数里的 rName 变量定义
  25.     '''''''''''''''''''''''''''
  26.     '输出参数说明:
  27.     'obj("pgnt") 为文章翻页链接
  28.     'obj("info") 为文章统计信息
  29.     'obj("cnt") 为文章内容
  30.     '''''''''''''''''''''''''''
  31.     'sample call:
  32.     '''''''''''''
  33.     '    dim rs, dic
  34.     '    set rs=createObject("adodb.recordset")
  35.     '        rs.open "select * from ctat where aid=15783",conn
  36.     '        
  37.     '        set dic=fAtPgnt(rs("content"),50000,request.queryString("apid"))
  38.     '            response.write dic("pgnt")&"<br/>"
  39.     '            response.write dic("info")&"<br/>"
  40.     '            response.write dic("cnt")&"<br/>"
  41.     '        set dic=nothing
  42.     '        
  43.     '        rs.close
  44.     '    set rs=nothing
  45.     ''''''''''''''''''''''''''''''''''''''''''''''''''''''
  46.         if isNumeric(pSize)=false or len(aStr)=0 then exit function
  47.         if isNull(rId) or rId="" or isNumeric(rId)=false then rId=1 '如果分页查询ID为空则 ID为 1
  48.         
  49.         dim aStrLen '取文章总长度的变量
  50.             aStrLen=len(aStr)
  51.         
  52.         '智能URL字符串替换
  53.         dim rqs, url, rName
  54.             rqs=request.ServerVariables("QUERY_STRING")
  55.             rName="apid"
  56.         if rqs="" then
  57.             url="?"&rName&"="
  58.         elseif instr(rqs,rName)<>0 then    
  59.             url="?"&replace(rqs,rName&"="&rId,"")&rName&"=" 
  60.         else
  61.             url="?"&replace(rqs,"&"&rName&"="&rId,"")&"&"&rName&"="
  62.         end if
  63.         
  64.         dim tPg '定义总页数变量
  65.             tPg=int(aStrLen/-pSize)*-1
  66.             
  67.         if rId<1 then rId=1 '如果分页查询ID小于1, 则为1
  68.         if cLng(rId)>cLng(tPg) then rId=tPg '如果分页查询ID大于总页数, 则为总页数
  69.             
  70.         dim cPg '定义取当前页字符起始位置变量
  71.         if rId=1 then cPg=1 else cPg=pSize*(rId-1)+1 '读取文章的起始位置
  72.  
  73.         dim dic '定义字典变量
  74.         set dic = createObject("scripting.dictionary")
  75.             if aStrLen<=pSize then '如果分页大小大于正文大小时, 执行以下操作
  76.                 dic.add "pgnt", "" '增加页面链接到字典
  77.                     
  78.                 '增加统计信息到字典
  79.                 dic.add "info", formatNumber(pSize,0)&"字/页 "&rid&"/"&tPg&"页 共"&_
  80.                 formatNumber(aStrLen,0)&"字"
  81.                 
  82.                 dic.add "cnt", mid(aStr,1) '增加内容到字典
  83.                 set fAtPgnt=dic
  84.                 set dic=nothing
  85.                 exit function
  86.             end if
  87.         
  88.             dim i, temp, temp1
  89.             for i=1 to tPg
  90.                 '如果当前查询ID=i, 则加入高亮CSS类
  91.                 if strComp(rId,i,1)=0 then temp1=" class=""hl"""
  92.                 temp=temp&"<a href="""&url&i&""""&temp1&">第"&i&"页</a> "
  93.             next 
  94.             
  95.             dic.add "pgnt", temp '增加页面链接到字典
  96.                 
  97.             '增加统计信息到字典
  98.             dic.add "info", formatNumber(pSize,0)&"字/页 "&rId&"/"&tPg&"页 共"&_
  99.             formatNumber(aStrLen,0)&"字"
  100.             
  101.             dic.add "cnt", mid(aStr,cPg,pSize) '增加文章内容到字典
  102.         set fAtPgnt=dic
  103.         set dic=nothing
  104.     end function 'shawl.qiu code'
  105. %>
  引自:    http://www.luffyes.com/articleview/2006-9-9/article_view_302.htm

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

正文:

QUOTE:

ASP VBScript 分页函数 by Stabx, 第三版

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

说明:
简化简化再简化, 只需输入 '''/// call fPageCount(连接名,每页总数,开始数,号码导航链接数) ///'''
详细如: call fPageCount(rs,50,1,10)
 
本版实现了不需输入 URL 就可以自动获取 URL 的功能
文本框翻页功能也实现了智能化, 不需指定 URL, 前提是客户端没关闭 JS (相信不会有太多人跟我一样, 通常浏览网页都关闭 JS, 只在调试时使用)
本版尽可能的没用 联字符(&), 该字符很费时

导航预览:
首页 上十 上一 81 82 83 84 85 86 87 88 89 90 下一 下十 尾页 转到:___
50篇/页 88/831页 共 41503篇

shawl.qiu
2006-5-31

CODE:

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

    toF_="首页"
     toP10_=" 上十"
     toP1_=" 上一"
     toN1_=" 下一"
     toN10_=" 下十"
     toL_="尾页"
    
     if not rs.eof  then
             rrc_=rs.recordcount
     end if

    if (not rs.eof or not rs.bof) and rrc_>repeatnum then '记录总数大于每页总数才显示分页链接
    
             rqq_=request.ServerVariables("QUERY_STRING") '获取 URL 查询串, 并筛选所需
             pv_=request("pageview") '翻页查询字符
         if rqq_="" then
             url="?pageview="
         elseif instr(rqq_,"pageview")<>0 then    
             url="?"&replace(rqq_,"pageview="&pv_,"")&"pageview=" '不要试图把 pageview= 放进 replace 里
         else
             url="?"&replace(rqq_,"&pageview="&pv_,"")&"&pageview=" '同上
         end if
            
             pageview=CInt(Request("pageview"))  '读取 URL 页号
             rs.PageSize=repeatnum '定义每页显示记录数
        
         If pageview<=0 Then pageview=1 '如果 pageview 小于或等于0, 返回值1
             If pageview>rs.PageCount Then pageview=rs.PageCount ' 如果 pageview 大于分页总数, 返回分页末页值  
             rs.AbsolutePage=pageview '定义当前页码
            
             cPageNo=rs.AbsolutePage
             tpagecount=rs.pagecount
        
             If cPageNo<1 Then cPageNo=1  '如果页数小于 1, 默认为 1; 当前页, cPageNo = Current Page NO.
             If tPageCount<1 Then tPageCount=1  
             If cPageNo>tPageCount Then cPageNo=tPageCount   
                 Dim NaviLength  
                 NaviLength=numlink ' 显示数字链接数
                 Dim StartPage,EndPage ' 定义当前页, 开始页, 结束页
                 StartPage=(cPageNo/NaviLength)*NaviLength+1  '为开始页赋值
                
             if pageview=1 then '判断是否首页, 如果是首页不添加链接,反之添加.
                 Response.Write "<font color=""#CCCCCC"">"
                 response.write toF_
                 response.write "</font> "
             Else  
                 Response.Write "<a href="""
                 response.write url
                 response.write "1#anchor"">"
                 response.write toF_
                 response.write "</a> "
             End If   
            
             If (cPageNo Mod NaviLength)=0 Then StartPage=StartPage-NaviLength   
                 EndPage=StartPage+NaviLength-1                  
             If EndPage>tPageCount Then EndPage=tPageCount   
    
             If StartPage>1 Then '向后移动一分页, 十页为一分页, 并且以 1, 11, 21... 为每页的开始页数
                 Response.Write "<a href="""
                 response.write url
                 response.write (cPageNo-(cPageNo mod 10)-NaviLength+1)
                 response.write "#anchor"">"
                 response.write toP10_
                 response.write "</a> "  
             Else  
                 Response.Write "<font color=""#CCCCCC"">"
                 response.write toP10_
                 response.write "</font> "  
             End If  
    
             If pageview <> 1 and pageview <>0 Then '后移一页
                 Response.Write "<a href="""
                 response.write url
                 response.write (pageview-1)
                 response.write "#anchor"">"
                 response.write toP1_
                 response.write "</a> "  
             Else  
                 Response.Write "<font color=""#CCCCCC"">"
                 response.write toP1_
                 response.write "</font> "  
             End If  
    
             For startbynum=StartPage To EndPage  
                 If startbynum=cPageNo Then  
                     Response.Write "<b class=""gray"">"
                     response.write startbynum
                     response.write "</b> "  
                 Else  
                     Response.Write "<a href="""
                     response.write url
                     response.write startbynum
                     response.write "#anchor"">" 
                     response.write startbynum
                     response.write  "</a> "  
                 End If  
             Next  
    
             If pageview <> rs.PageCount and pageview <>0 Then '前移一页
                 Response.Write " <a href="""
                 response.write url
                 response.write (pageview+1)
                 response.write "#anchor"">"
                 response.write toN1_
                 response.write "</a> "  
             Else  
                 Response.Write "<font color=""#CCCCCC"">"
                 response.write toN1_
                 response.write "</font> "  
             End If  
    
             If EndPage<tpagecount Then  '向前移动一分页, 十页为一分页, 并且以 1, 11, 21 为每页的开始页数
                 Response.Write " <a href="""
                 response.write url
                 response.write (cPageNo-(cPageNo mod 10)+NaviLength+1)
                 response.write "#anchor"">"
                 response.write toN10_
                 response.write "</a> "  
             Else  
                 Response.Write " <font color=""#CCCCCC"">"
                 response.write toN10_
                 response.write "</font> "  
             End If  
    
             if  rs.PageCount<>pageview then '判断是否尾页
                 Response.Write "<a href="""
                 response.write url
                 response.write tpagecount
                 response.write "#anchor"">"
                 response.write toL_
                 response.write "</a>"  
             Else  
                 Response.Write "<font color=""#CCCCCC"">"
                 response.write toL_
                 response.write "</font>" 
             End If  
                 response.write " 转到:<input TYPE=""text"" class= ""jumpinput"" onMouseMove=""this.focus();this.select();"" onkeypress=""ckKeyPress(this.value);"" ><br/>"
                 '页面信息
                 response.write repeatnum
                 response.write "篇/页 "
                 response.write cPageNo
                 response.write "/"
                 response.write tPageCount
                 response.write "页 共 "
                 response.write rrc_
                 response.write "篇<script>function ckKeyPress(jumpto){if (window.event.keyCode==13) {window.location.href="""
                 response.write url
                 response.write """+jumpto+""#anchor""}}</script>"
             elseif (not rs.eof or not rs.bof) and rrc_<=repeatnum then 
                 response.write "<div class=font12px>共 "
                 response.write rrc_
                 response.write " 篇</div>"
             end if
end function


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

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

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

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

 
原创粉丝点击