欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

超级ASP大分页_我的类容我做主

程序员文章站 2023-08-13 21:27:08
超级asp大分页_我的类容我做主     选择自 applebbs 的 blog ...
超级asp大分页_我的类容我做主     选择自 applebbs 的 blog  
关键字   超级asp大分页_我的类容我做主 
出处  
 <% 
'=================================================================== 
'showmorepage asp版本 
'version huangjm1.00 
'code by maomao 
'create date 2004-09-28 
'qq:5144707 
'http://blog.csdn.net/maomaoysq 
'write for my lover:huangjm '本程序可以免费使用、修改,但请保留以上信息 

'function 
'本程序主要是对数据分页的部分进行了封装,而数据显示部份完全由用户自定义, 
'支持url多个参数:http://www.***.com/***.asp?aa=1&page=9&bb=2 


'paramers: 
'papgesize 定义分页每一页的记录数 
'getcurpagenum 返回当前页的记录集数目此属性只读 
'getrs 返回经过分页的recordset此属性只读 
'getconn 得到数据库连接 
'getsql 得到查询语句 
'interface of class 
'showpage 显示分页导航条,唯一的公用方法 

'#############类调用样例################# 
'创建对象 
'set hjmpage=new showmorepage 
'得到数据库连接 
'hjmpage.getconn=conn 
'sql语句 
'hjmpage.getsql="select * from shop_books where newsbook=1 order by bookid desc" 
'设置每一页的记录条数据为20条,默认显示10条 
'hjmpage.pagesize=20 
'显示分页信息,可在任意位置调用,可以调用多次 
'hjmpage.showpage() 
'set rs=hjmpage.getrs() '返回recordset 
'显示数据开始 
'这里就可以自定义显示方式了 
'for i=1 to hjmpage.getcurpagenum '当前页的记录数目 
'response.write left(trim(rs("bookname")),13)&"...." 
'rs.movenext 
'next 
'显示数据结束 
'set hjmpage=nothing 
'#############类调用样例################# 
'=================================================================== 
const btn_first="<font face=""webdings"">9</font>" '定义第一页按钮显示样式 
const btn_prev="<font face=""webdings"">3</font>" '定义前一页按钮显示样式 
const btn_next="<font face=""webdings"">4</font>" '定义下一页按钮显示样式 
const btn_last="<font face=""webdings"">:</font>" '定义最后一页按钮显示样式 
const xd_align="center" '定义分页信息对齐方式 
const xd_width="100%" '定义分页信息框大小 
class showmorepage 
private obj_conn,obj_rs,str_sql,int_pagesize,str_errors,int_curpage,str_url,int_totalpage,int_totalrecord 

'================================================================= 
'pagesize 属性 
'设置每一页的分页大小 
'================================================================= 
public property let pagesize(intvalue) 
if isnumeric(intvalue) then 
int_pagesize=clng(intvalue) 
else 
str_errors=str_errors & "pagesize的参数不正确" 
showerror() 
end if 
end property 
public property get pagesize 
if int_pagesize="" or (not(isnumeric(int_pagesize))) then 
pagesize=10  
else 
pagesize=int_pagesize 
end if 
end property 
'================================================================= 
'getrs 属性 
'返回分页后的记录集 
'================================================================= 
public property get getrs() 
if int_totalrecord= 0 then call getpage() 
if not(obj_rs.eof and obj_rs.bof) then 
if int_curpage<>1 then 
if int_curpage-1<int_totalpage then 
obj_rs.move (int_curpage-1)*pagesize 
dim bookmark 
bookmark=obj_rs.bookmark 
else 
int_curpage=1 
end if 
end if 
end if 
set getrs=obj_rs 
end property 
'================================================================= 
'getcurpagenum 属性 
'返回当前页的记录集数目 
'================================================================= 
public property get getcurpagenum() 
dim int_pagenum 
int_pagenum = int_pagesize 
if int_totalrecord= 0 then call getpage() 
if int_curpage>int_totalpage then 
int_curpage=int_totalpage 
int_pagenum = int_totalrecord-(int_totalpage-1)*int_pagesize  
elseif int_curpage=int_totalpage then 
int_pagenum = int_totalrecord-(int_totalpage-1)*int_pagesize  
end if 
getcurpagenum = int_pagenum 
end property 
'================================================================ 
'getconn 得到数据库连接 

'================================================================  
public property let getconn(sconn) 
set obj_conn=sconn 
end property 
'================================================================ 
'getsql 得到查询语句 

'================================================================ 
public property let getsql(svalue) 
str_sql=svalue 
end property 

'================================================================== 
'class_initialize 类的初始化 
'初始化当前页的值 

'==================================================================  
private sub class_initialize 
'======================== 
'设定一些参数的黙认值 
'======================== 
int_pagesize=10 '设定分页的默认值为10 
int_totalrecord= 0 
'======================== 
'获取当前面的值 
'======================== 
if request("page")="" then 
int_curpage=1 
elseif not(isnumeric(request("page"))) then 
int_curpage=1 
elseif cint(trim(request("page")))<1 then 
int_curpage=1 
else 
int_curpage=cint(trim(request("page"))) 
end if 
end sub 
'==================================================================== 
'openrs 打开数据集 
'有首页、前一页、下一页、末页、还有数字导航 

'==================================================================== 
private sub openrs() 
set obj_rs=server.createobject("adodb.recordset") 
obj_rs.open str_sql,obj_conn,1,1 
end sub 
'==================================================================== 
'getpage 创建分页导航条 
'有首页、前一页、下一页、末页、还有数字导航 

'==================================================================== 
private sub getpage() 
if typename(obj_rs)<>"object" then call openrs() 
int_totalrecord=obj_rs.recordcount 
if int_totalrecord<=0 then 
str_errors=str_errors & "总记录数为零,请输入数据" 
call showerror() 
end if 
if int_totalrecord mod pagesize =0 then 
int_totalpage = int_totalrecord \ int_pagesize 
else 
int_totalpage = int_totalrecord \ int_pagesize+1 
end if  
if int_curpage>int_totalpage then 
int_curpage=int_totalpage 
end if 
end sub 
'==================================================================== 
'showpage 创建分页导航条 
'有首页、前一页、下一页、末页、还有数字导航 

'==================================================================== 
public sub showpage() 
dim str_tmp 
str_url = geturl() 
if int_totalrecord= 0 then call getpage() 
'================================================================== 
'显示分页信息,各个模块根据自己要求更改显求位置 
'================================================================== 
response.write "" 
str_tmp=showfirstprv 
response.write str_tmp 
str_tmp=shownumbtn 
response.write str_tmp 
str_tmp=shownextlast 
response.write str_tmp 
str_tmp=showpageinfo 
response.write str_tmp  
response.write "" 
end sub 
'==================================================================== 
'showfirstprv 显示首页、前一页 


'==================================================================== 
private function showfirstprv() 
dim str_tmp,int_prvpage 
if int_curpage=1 then 
str_tmp=btn_first&" "&btn_prev 
else 
int_prvpage=int_curpage-1 
str_tmp="<a href="""&str_url & "1" & """>" & btn_first&"</a> <a href=""" & str_url & cstr(int_prvpage) & """>" & btn_prev&"</a>" 
end if 
showfirstprv=str_tmp 
end function 
'==================================================================== 
'shownextlast 下一页、末页 


'==================================================================== 
private function shownextlast() 
dim str_tmp,int_nextpage 
if int_curpage>=int_totalpage then 
str_tmp=btn_next & " " & btn_last 
else 
int_nextpage=int_curpage+1 
str_tmp="<a href=""" & str_url & cstr(int_nextpage) & """>" & btn_next&"</a> <a href="""& str_url & cstr(int_totalpage) & """>" & btn_last&"</a>" 
end if 
shownextlast=str_tmp 
end function 

'==================================================================== 
'shownumbtn 数字导航 
'每次显示10页 

'==================================================================== 
private function shownumbtn() 
dim i,str_tmp,m,n 
m = int_curpage - 4 
n = int_totalpage 
if n>1 then 
for i = 1 to 10 
if m < 1 then m = 1  
if m > n then 
exit for 
end if 
str_tmp=str_tmp & "[<a href=""" & str_url & cstr(i) & """>"&i&"</a>] " 
m = m + 1 
next 
end if 
shownumbtn=str_tmp 
end function 

'==================================================================== 
'showpageinfo 分页信息 
'更据要求自行修改 

'==================================================================== 
private function showpageinfo() 
dim str_tmp 
str_tmp="页次:"&int_curpage&"/"&int_totalpage&"页 共"&int_totalrecord&"条记录 "&int_pagesize&"条/每页" 
showpageinfo=str_tmp 
end function 
'================================================================== 
'geturl 得到当前的url 
'更据url参数不同,获取不同的结果 

'================================================================== 
private function geturl() 
dim strurl,tmp_url,i,j,search_str,result_url 
search_str="page=" 
strurl=request.servervariables("url") 
strurl=split(strurl,"/") 
i=ubound(strurl,1) 
tmp_url=strurl(i)'得到当前页文件名 
str_params=trim(request.servervariables("query_string")) 
if str_params="" then 
result_url=tmp_url & "?page=" 
else 
if instrrev(str_params,search_str)=0 then 
result_url=tmp_url & "?" & str_params &"&page=" 
else 
j=instrrev(str_params,search_str)-2 
if j=-1 then 
result_url=tmp_url & "?page=" 
else 
str_lparams=left(str_params,j) 
str_rparams=right(str_params,len(str_params)-j-1) 
if instr(str_rparams,"&")<>0 then 
str_rparams=right(str_rparams,len(str_rparams)-instr(str_rparams,"&")+1) 
else 
str_rparams = "" 
end if 
result_url=tmp_url & "?" & str_lparams&str_rparams&"&page=" 
end if 
end if 
end if 
geturl=result_url 
end function 
'==================================================================== 
' 设置 terminate 事件。 

'==================================================================== 
private sub class_terminate  
obj_rs.close 
set obj_rs=nothing 
obj_conn.close 
set obj_conn = nothing 
end sub 
'==================================================================== 
'showerror 错误提示 


'==================================================================== 
private sub showerror() 
if str_errors <> "" then 
response.write("" & str_errors & "") 
response.end 
end if 
end sub 
end class  
%> 

<!--#include file="include/function.asp"--> 
<% 
dim conn 
call dbconnect() 
'#############类调用样例################# 
'创建对象 
set hjmpage=new showmorepage 
'得到数据库连接 
hjmpage.getconn=conn 
'sql语句 
hjmpage.getsql="select top 6 * from shop_books where newsbook=1 order by bookid desc" 
'设置每一页的记录条数据为5条 
hjmpage.pagesize=2 
set rs=hjmpage.getrs() '返回recordset 
'显示分页信息,这个方法可以,在set rs=hjmpage.getrs()以后,可在任意位置调用,可以调用多次 
hjmpage.showpage() 
'显示数据 
response.write("<br/>") 
for i=1 to hjmpage.getcurpagenum '当前页的记录数目 
'这里就可以自定义显示方式了 
%>