• 支持多风格自由变换的ASP分页类




      1
    <%
      2Class Page
      3Private CurrPage
      4Private PageN
      5Private UrlStr
      6Private TempStr
      7Private ErrInfo
      8Private IsErr
      9Private TotalRecord
     10Private TotalPage
     11Public  PageRs
     12
     13Private TempA(11)
     14Private TempB(8)
     15'------------------------------------------------------------
     16Private Sub Class_Initialize()
     17      CurrPage=1'//默认显示当前页为第一页
     18      PageN=10'//默认每页显示10条数据
     19      UrlStr="#"
     20      TempStr=""
     21      ErrInfo="ErrInfo:"
     22      IsErr=False
     23End Sub
     24Private Sub Class_Terminate()
     25      If IsObject(PageRs) Then
     26            PageRs.Close
     27            Set PageRs=Nothing
     28      End If
     29      Erase TempA
     30      Erase TempB
     31End Sub
     32'----------------------------------------------------------
     33'//获取当前页码
     34Public Property Let CurrentPage(Val)
     35      CurrPage=Val 
     36End Property
     37Public Property Get CurrentPage()
     38      CurrentPage=CurrPage
     39End Property
     40'//获取每页显示条数
     41Public Property Let PageNum(Val)
     42      PageN=Val
     43End Property
     44Public Property Get PageNum()
     45      PageNum=PageN
     46End Property
     47'//获取URL
     48Public Property Let Url(Val)
     49      UrlStr=Val
     50End Property
     51Public Property Get Url()
     52      Url=UrlStr
     53End Property
     54'//获取模板
     55Public Property Let Temp(Val)
     56      TempStr=Val
     57End Property
     58Public Property Get Temp()
     59      Temp=TempStr
     60End Property
     61'------------------------------------------------------------
     62
     63Public Sub Exec(Sql,ConnObj)
     64      On Error Resume Next
     65      Set PageRs=Server.CreateObject("ADODB.RecordSet")
     66      PageRs.CursorLocation = 3 '使用客户端游标,可以使效率提高
     67      PageRs.PageSize = PageN '定义分页记录集每页显示记录数
     68      PageRs.Open Sql,ConnObj,0,1
     69      If Err.Number<>0 Then
     70        Err.Clear
     71     PageRs.Close
     72     Set PageRs=Nothing
     73        ErrInfo=ErrInfo&"建立或打开记录集错误"
     74     IsErr=True
     75     Response.Write ErrInfo
     76     Response.End
     77      End If
     78      TotalRecord=PageRs.RecordCount'//如果为0呢?
     79      If TotalRecord>=1 Then
     80      '----------------------------------------------------------------------------开始
     81      '//计算总页数,Ps,为什么不用PageRs.PageCount呢?
     82      'If TotalRecord Mod PageN=0 Then
     83        'TotalPage=PageRs.RecordCount\PageN
     84      'Else
     85        'TotalPage=PageRs.RecordCount\PageN
     86     'TotalPage=Abs(Int(TotalPage))
     87      'End If
     88   TotalPage=PageRs.PageCount
     89      '//处理当前接收页码,默认的为1,所以不是数字类型的都会为1
     90      If IsNumeric(CurrPage) Then
     91         CurrPage=CLNg(CurrPage)
     92         If CurrPage<1 Then CurrPage=1
     93      If CurrPage>TotalPage Then CurrPage=TotalPage
     94      Else
     95            '//Dim M:M="":IsNumeric(M)=True
     96         CurrPage=1
     97      End If
     98      '---------------------------------------------------------------------------结束
     99      Else
    100         TotalPage=0
    101         CurrPage=1
    102      End If
    103      '//
    104      PageRs.AbsolutePage = CurrPage 'absolutepage:设置指针指向某页开头
    105      PageRs.PageSize=PageN
    106End Sub
    107Private Sub Init()
    108      'Private TempA(10)
    109      TempA(1)="{N1}" '//首页
    110      TempA(2)="{N2}"'//上一页
    111      TempA(3)="{N3}"'//下一页
    112      TempA(4)="{N4}"'//尾页
    113      TempA(5)="{N5}"'//当前页码
    114      TempA(6)="{N6}"'//页码总数
    115      TempA(7)="{N7}"'//每页条数
    116      TempA(8)="{N8}"'//文章总数
    117      TempA(9)="{L}"'//循环标签开始
    118      TempA(10)="{N}"'//循环内单标签:页码
    119      TempA(11)="{L/}"'//循环标签结束
    120      'Private TempB(8)
    121      TempB(1)="首页"
    122      TempB(2)="上一页"
    123      TempB(3)="下一页"
    124      TempB(4)="尾页"
    125      TempB(5)=CurrPage'//当前页码
    126      TempB(6)=TotalPage'//页码总数
    127      TempB(7)=PageN'//每页条数
    128      TempB(8)=TotalRecord'//文章总数
    129End Sub
    130Public Sub Show(Style)
    131      If IsErr=True Then
    132        Response.Write ErrInfo
    133     Exit Sub
    134      End If
    135
    136      Call Init()
    137      Select Case Style
    138      Case 1
    139         Response.Write StyleA()
    140      Case 2
    141         Response.Write StyleB()
    142      Case 3
    143         Response.Write StyleC()
    144      Case 4
    145         Response.Write StyleD()
    146      Case Else
    147         ErrInfo=ErrInfo&"不存在当前样式"
    148      Response.Write ErrInfo
    149      End Select
    150End Sub
    151Public Function ShowStyle(Style)
    152      If IsErr=True Then
    153        ShowStyle=ErrInfo
    154     Exit Function
    155      End If
    156
    157      Call Init()
    158      Select Case Style
    159      Case 1
    160         ShowStyle= StyleA()
    161      Case 2
    162         ShowStyle= StyleB()
    163      Case Else
    164         ErrInfo=ErrInfo&"不存在当前样式"
    165  ShowStyle=ErrInfo
    166      End Select
    167End Function
    168
    169Private Function StyleA()
    170'首页 上一页 下一页 尾页  本页为第1/20页,共20页,每页10条,文章总数200条
    171'//分页样例:[首页] [上页] [下页] [尾页] [页次:4/5页] [共86篇 20篇/页] 转到:_ 页
    172'//标签:{N1} {N2} {N3} {N4} || 共:{N8}条记录 {N6}页 当前为第{N5}页 每页{N7}条
    173If IsEmpty(TempStr) Then
    174      ErrInfo=ErrInfo&"模板为空"
    175      StyleB=ErrInfo
    176      Exit Function
    177End If
    178Dim M
    179If TotalPage>1 Then
    180      If CurrPage>1 Then
    181        M="<a href='"&UrlStr&"Page=1'>"&"首页"&"</a>"
    182     TempStr=Replace(TempStr,"{N1}",M)
    183     M="<a href='"&UrlStr&"Page="&CurrPage-1&"'>"&"上一页"&"</a>"
    184     TempStr=Replace(TempStr,"{N2}",M)
    185     If CurrPage<TotalPage Then
    186       M="<a href='"&UrlStr&"Page="&CurrPage+1&"'>"&"下一页"&"</a>"
    187    TempStr=Replace(TempStr,"{N3}",M)
    188    M="<a href='"&UrlStr&"Page="&TotalPage&"'>"&"尾页"&"</a>"
    189          TempStr=Replace(TempStr,"{N4}",M)
    190        Else
    191       TempStr=Replace(TempStr,"{N3}","下一页")
    192    TempStr=Replace(TempStr,"{N4}","尾页")
    193     End If
    194      Else
    195        TempStr=Replace(TempStr,"{N1}","首页")
    196     TempStr=Replace(TempStr,"{N2}","上一页")
    197        M="<a href='"&UrlStr&"Page="&CurrPage+1&"'>"&"下一页"&"</a>"
    198     TempStr=Replace(TempStr,"{N3}",M)
    199     M="<a href='"&UrlStr&"Page="&TotalPage&"'>"&"尾页"&"</a>"
    200        TempStr=Replace(TempStr,"{N4}",M)
    201      End If
    202Else
    203      TempStr=Replace(TempStr,"{N1}","首页")
    204      TempStr=Replace(TempStr,"{N2}","上一页")
    205      TempStr=Replace(TempStr,"{N3}","下一页")
    206      TempStr=Replace(TempStr,"{N4}","尾页")
    207End If
    208T=TempStr
    209T=Replace(T,"{N8}",TotalRecord)
    210T=Replace(T,"{N6}",TotalPage)
    211T=Replace(T,"{N5}",CurrPage)
    212T=Replace(T,"{N7}",PageN)
    213TempStr=T
    214StyleA=TempStr
    215End Function
    216
    217Private Function StyleB()
    218'首页 |< 1 2 3 4 5 6 7 >| 尾页
    219'//标签:{N1} {N2} {L}{N}{L/}{N3}{N4}
    220If IsEmpty(TempStr) Then
    221      ErrInfo=ErrInfo&"模板为空"
    222      StyleB=ErrInfo
    223      Exit Function
    224End If
    225Dim ForceNum,BackNum'//当前页的前面和后面显示个数
    226ForceNum=5
    227BackNum=4
    228Dim M
    229'//首页
    230M="<a href='"&UrlStr&"Page=1'>"&TempB(1)&"</a>"
    231TempStr=Replace(TempStr,"{N1}",M)
    232'//尾页
    233M="<a href='"&UrlStr&"Page="&TempB(6)&"'>"&TempB(4)&"</a>"
    234TempStr=Replace(TempStr,"{N4}",M)
    235'//前一页
    236M="|<"
    237If CurrPage-1>=1 Then
    238      M="<a href='"&UrlStr&"Page="&CurrPage-1&"'>"&"|<"&"</a>"
    239End If
    240TempStr=Replace(TempStr,"{N2}",M)
    241'//后一页
    242M=">|"
    243If CurrPage+1<=TotalPage Then
    244      M="<a href='"&UrlStr&"Page="&CurrPage+1&"'>"&">|"&"</a>"
    245End If
    246TempStr=Replace(TempStr,"{N3}",M)
    247'//取出循环标签
    248Dim N1,N2,N3,N4,N5,N6
    249If InStr(TempStr,"{L}")>0 Then
    250      N1=InStr(TempStr,"{L}")
    251End If
    252If InStr(TempStr,"{L/}")>0 Then
    253      N2=InStr(TempStr,"{L/}")
    254End If
    255If N2<=N1 Then
    256      ErrInfo=ErrInfo&"循环标签出错"
    257      StyleB=ErrInfo
    258      Exit Function
    259End If
    260N3=Mid(TempStr,N1,N2-N1+4)'//储存包括{L}{L/}循环标签的模板
    261N4=Replace(N3,"{L}","")'//储存不包括{L}{L/}循环标签的模板
    262N4=Replace(N4,"{L/}","")
    263'//页码列表
    264Dim FirstPageNum,LastPageNum
    265If CurrPage-ForceNum<=1 Then
    266   FirstPageNum=1
    267   PageList=""
    268Else
    269   FirstPageNum=CurrPage-ForceNum
    270   PageList=" "
    271End If
    272If CurrPage+BackNum>=TotalPage Then
    273   LastPageNum=TotalPage
    274   PageList_2=""
    275Else
    276   LastPageNum=CurrPage+BackNum
    277   PageList_2=" "
    278End If
    279Dim I
    280For I=FirstPageNum To LastPageNum
    281      If I=CurrPage Then
    282        N5=Replace(N4,"{N}","<b>"&I&"</b>")
    283     N6=N6&N5
    284      Else
    285        M="<a href='"&UrlStr&"Page="&I&"'>"&I&"</a>"
    286     N5=Replace(N4,"{N}",M)
    287     N6=N6&N5
    288      End If
    289Next
    290TempStr=Replace(TempStr,N3,N6)
    291StyleB=TempStr
    292End Function
    293
    294Private Function StyleC()
    295'首页 |< |<< 1 2 3 4 5 6 7 >>| >| 尾页
    296'//此风格在StyleB的基础上修改,增加两个标签:{N9}上10页 {N10}下10页
    297'//标签:{N1}{N2}{N9}{L}{N}{L/}{N10}{N3}{N4}
    298Dim T
    299T=StyleB()
    300'//前十页
    301M="|<<"
    302If CurrPage-10>=1 Then
    303      M="<a href='"&UrlStr&"Page="&CurrPage-10&"'>"&"|<<"&"</a>"
    304End If
    305T=Replace(T,"{N9}",M)
    306M=">>|"
    307If CurrPage+10<=TotalPage Then
    308      M="<a href='"&UrlStr&"Page="&CurrPage+10&"'>"&">>|"&"</a>"
    309End If
    310T=Replace(T,"{N10}",M)
    311StyleC=T
    312End Function
    313
    314Private Function StyleD()
    315'//此风格在StyleC的基础上修改
    316'//共{N8}条记录 {N6}页 当前为第{N5}页 每页{N7}条
    317'//首页 |< |<< 1 2 3 4 5 6 7 >>| >| 尾页
    318'//标签:{N1}{N2}{N9}{L}{N}{L/}{N10}{N3}{N4}
    319Dim T
    320T=StyleC()
    321T=Replace(T,"{N8}",TotalRecord)
    322T=Replace(T,"{N6}",TotalPage)
    323T=Replace(T,"{N5}",CurrPage)
    324T=Replace(T,"{N7}",PageN)
    325StyleD=T
    326End Function
    327
    328End Class
    329%>
    330
    这个分页使用的是0游标,也就是Rs.Open Sql,Conn,0,1。但是感觉也快不了多少,10
    万条数据的分页时间300多豪秒之间

    Set test = New Page '创建啦
    test.CurrentPage=1 '自己去读取拉,当前的页数
    test.temp="{N1}{N2}{N3} {N4}"'这里是显示的模版,自己可以定义,至于标签,可以自己去那个类里找
    test.Exec "Select * From [movie]",conn '这里执行sql语句,conn就是数据连接对象了
    test.Show 1 '显示分页样式,可以根据用户输入的参数把这里的1换成变量

    这个类可以扩展的地方很多,不错哦.
    另外还有其他一些参数可以设置的.
  • 相关阅读:
    【Luogu1508】Likecloud-吃、吃、吃
    Linux部署python django程序-apache
    Linux下开发python django程序(Session读写)
    Linux下开发python django程序(设置admin后台管理上传文件和前台上传文件保存数据库)
    Linux下开发python django程序(Form表单对象创建和使用)
    Linux下开发python django程序(django数据库多对多关系)
    Linux下开发python django程序(设置admin后台管理模块)
    Linux下开发python django程序(模板设置和载入数据)
    Linux命令学习笔记2(mysql安装和mysql-python安装)
    Linux下开发python django程序
  • 原文地址:https://www.cnblogs.com/MaxIE/p/565679.html
Copyright © 2020-2023  润新知