为了方便使用分类,我定义了一个分类表category,里面字段是
id(自动编号) cat_name(分类名) parent_id(父ID,对应本表ID) cat_order(顺序) is_show(是否显示) u_id(这个用来区别是新闻分类,还是产品分类,还是其他分类),为了方便,我将这些分类全部放在这张表中。
在给客户添加分类的时候,结果有太多的分类,本来前台显示的时候,将它们全部显示出来了,好长。客户提出修改意见,要求将它们改成点击大分类,才可以将其子分类显示出来,并且每个分类下面还有一条虚线,并且大分类前面有个图片加号,展开后要变成减号。
数据库连接:
以下为引用的内容: <% |
打开数据库:
以下为引用的内容: exec="select * from 数据库表" 读取内容格式:<%=rs("字段")%> |
添加记录处理程序:
以下为引用的内容: <% |
搜索处理程序:
以下为引用的内容: <% |
删除记录处理程序:
以下为引用的内容: <% |
修改记录处理程序:
以下为引用的内容: <% |
修改记录执行程序:输入ID号页面>>>导出相对应ID数据>>>>>>直接修改的处理程序
后台登陆处理程序例子:
以下为引用的内容: <% 每个后台页面加上: |
asp开发规范 ——写这个东西请多多指教,以后开发时好少吃点苦头。
一、单页编写规范:
切记页面要分模块来写:
第一模块:接收参数。[有可能从不同页面提交到同一个页面;也可能出现两个表单项以哪个优先的处理。
第二模块:定义全局变量。
第三模块:写处理代码(尽量将代码都包含到函数中,详见页面附注一。)。——到此asp代码主要部分完成。
第四模块:纯html代码,利用储存在全局变量中的值来生成页面。
第五(注意):要在页面头部写清页面逻辑。(如何接收、处理。)
优点:便于维护。模块独立,便于重复使用到类似页面。
二、全站文件构建规范:
1.工程接手后,先观看静态页,掌握逻辑及浏览顺序。
2.抽取页面中被重复利用到的地方做成嵌入文件。
3.抽取头文件、尾文件,及左侧菜单栏,做成嵌入文件。
4.划分页面结构,做出模板文件。——以后制作中就copy它,然后就可直接制作。
注意:不要急于编写页面,除非你接手的是一项小工程,或者用户需求已经非常清楚确定并且不会再更改,否则,保持页面代码的可读性是非常重要的!(当你面对大返工时,你的心情如何?先对潜在的危险考虑一下吧!)
——因为我们每个人都对自己写的代码非常明白,而都比较难于读懂别人写的代码。并且,由于客户需求的变化,修改甚至推翻原有设计是比较常见的事。所以要注意在编写代码时注意让后来者快速读懂,并便于修改。][至少要在页面头部加上注释,在代码中间重要的部分,也有必要加一些说明性注释。]
我们所作的一切仅仅是为了:增加可移植可重用性、使逻辑清楚,便于维护、
适应用户需求的改变,并尽快完成,减少无用功。
――――――――――――――――――――――――――――――――――――――
附注一:第三模块编写说明。《ASP页面编写结构》
1.先写注释
2.写嵌入文件。
3.写大块的ASP代码(从COM中取出的)
——注意:复杂页面,尽量将不同COM的操作封装在独立的函数里;
——函数结尾有一句调用,后面页面中直接读取函数处理完的数据(已被赋给全局变量)
——调用函数前,对页面入口参数进行合法性检验。
附注二:第四模块编写说明。《Html代码部分需要注意的》
1)最好不使页面的asp代码和html代码混杂在一起,——感觉比较混乱。
2)通过获取全局变量的数据得到asp的处理结果。
3)关于客户端javascript:
表单提交前要进行合法性检验。写在
对下拉框要有和隐藏按钮同步的,写出单独小函数,放在该按钮的下面。
对大型innerHTML型的客户端交互操作,将代码集中写在相应对应的
写客户端脚本时,可多写些函数,使函数间传递的参数简单,功能单一,以便日后有类似页面,可以将其拆下来再使用。
对网页制作的要求:
网页人员完成的页面,为保证在使用时不会出现混乱,请他们作以下处理:
1.表格不要嵌套太多;
2.表格宽度要用象素规定宽度;
3.单页中,一个功能模块要做成一个表格,以便编写页面时,将重复部分提取成嵌入文件。
4.其它要注意的:精简代码、注意表格中字符和边框的宽度。
5.文件名请用英文小写加数字(和半角下划线)命名。[想想你的页面搬到unix主机上的惨状]
为了规范程序代码编写,提高代码可读性,降低后期维护成本,提高办公效率,建议以后编写的程序按以下几条规范进行:
一、 统一VBSCRIPT和ASP程序编写规范:
(一)变量命名规则:
由于在ASP和VBSCRIPT中因为不需要声明变量,同时不能声明变量的类型,但为了提高代码的可读性,养成好的开发习惯,对于本系统开发的变量命名统一规则如下:
1. 使用Dim、Public、Private声明变量;
例如:Dim iStudentNum
2. 变量类型的体现:
a、整型变量:以小写字母i开头,后面跟变量标示符,英文单词的第一个字母大写。
例如:下面声明一个存储数据库记录多少的变量
Dim iResordsetNumber
b、单精度实体变量:以小写字母f开头,后面跟变量标示符,英文单词的第一个字母大写。
c、双精度实体变量:以小写字母d开头,后面跟变量标示符,英文单词的第一个字母要大写。
d、 字符型变量:以小写字母s开头;
e、 布尔型变量:以小写字母b开头;
f、数组变量:数组类型+“_”+“Array”+“_”+“变量标示符”
例如:定义一个存储学生成绩的数组(存储单精度实体类型变量)
Dim f_Array_StudentMark
3. 变量标示符要符合标示符标准,同时容易理解,尽量使用英文单词来代替,尽量避免使用缩写或简写。
例如:存储校友通讯录的字符串变量定义为:
Dim sSchoolfellowAddressList;
虽然这样定义在输入的时候比较麻烦,但是,它大大提高了程序的可读性,见其变量命名就知其意。在做变量查找的时候也比较方便。速度和性能总是不能两全,为了方便后者我们也就只有牺牲速度。
4.在变量定义后面加变量功能定义的注释。
(二)常量命名规则:
类型体现和上面一样,不一样的地方是,所有后面的标示符全部大写,例如:
定义一个存储语言种类的的字符型常量:
Const sLANGUAGE_TYPE=”Chinese”
(三)功能函数、过程命名规则:
1. 使用Function声明函数,用Sub声明过程;
2. 函数名或过程名的第一个字母大写,且后面的每个单词第一个字母大写。
例如:
Function CheckValidityOfInput(sStuentMark)
‘此处写代码
…………
End Function
3. 函数名或过程名要容易读,简单明了。
4. 在函数前面加注释,说明函数功能、参数说明、创建日期、修改日期、修改原因、创建人、修改人等相关信息。
(四)代码缩进标准:
为了提高代码的美观型和易读性,在此提出代码编写的版面格式:区间与区间之间以一个为间距。
例如:
‘***********************************************************
‘功能:检测输入字符串中的单引号,如果有则把原来的一个单引号变成两
‘ 个单引号,两个变成四个,依次类推,从而避免SQL语句执行错误。
‘创建人:XXXX
‘修改时间:
‘修改原因:
‘修改人:
‘输入参数说明:sInputString:需要进行单引号检测的字符串
‘***********************************************************
Function CheckValidityOfInput(sInputString)
Dim iCirculationControl ‘控制循环
Dim sApartString ‘分离字符检测
Dim iLenOfInput ‘输入字符长度
iLen= Len(Trim(sInputString))
For iCirculationControl = 1 To iLen
If Mid(sInputString, iCirculationControl, 1) <>"'" Then
sApartString = sApartString & _
Mid(Trim(sInputString), iCirculationControl , 1)
Else
sApartString = sApartString & "''"
End If
Next
CheckValidityOfInput = sApartString
End Function
二、 统一JavaScript程序编写规范:
JavaScript的命名规则和上面大部分相同,唯一不同的地方是:变量使用Var来声明,在声明结束后以分号(;)结束。
函数的代码要求层次清楚,该写在下一行的地方尽量往下一行写,不要在一行中完成所有代码,这样看起来不容易,检查错误也特别费时。
在写函数的时候记着加注释内容,以便以后维护时快速了解程序功能。
下面是一个JavaScript程序:
三、 系统性能提高,代码规范:
1.在ASP页面内,凡是使用CreageObject()创建的对象(Com、Recordset等),对于这些变量,应当在该页结束进行对象释放:即
Set 对象变量名=Nothing
2.数据库打开以后在不用的时候(通常是本页最后面),需要对连接进行关闭;
3.对于SQL语句,存储过程,尽量避免使用*来取所有字段,为了代码的易读性,SQL关键字要求全部大写,字段部分小写。
例如:
SELECT name,age,birthday,telephone,address FROM SchoolFellow.Address WHERE name=’xxxx’ ORDER BY birthday DESC
4.在ASP页中所有属性值尽量使用双引号括起来,特别是有属性Value的值,不要因为省时间而把双引号去掉(有的地方虽然可以去掉,程序不会出现错误,但,在有的地方去掉双引号会引来更多的麻烦。)
例如:
”>
在这个例子中,如果把Value属性值的单引号去掉,如果数据库中出来的值有空格,空格后面还有值,结果,显示的内容只有空格前面的内容,而后面的内容就会丢失。这只是其中一种情况,其他还有很多未知情况发生。
5. 配对标签问题:对于象之类的标签,要注意检查配对的位值,有没有结束标志。
6. 对于需要输入字符串,且需要使用SQL语句的地方,需要进行单引号处理,调用/include/CheckQ.asp中的两个方法(一个是客户端处理,一个是服务器端处理,根据需要进行调用,安全性要求高的地方多数情况下采用服务器端处理。)之一。
7. 为了提高安全性,能使用ASP编写的代码,尽量采用ASP编写,在服务器端运行,不让用户看到代码。
8. 对于安全性要求特别高的地方,建议采用三层结构:使用VB或Delphi编写商业逻辑层代码(COM),尽量把数据库的连接部分封装到组件中,提高安全性能,通过组件和数据库交流。
9. 对于网站的安全性,应该采用好的断口扫描软件,查看网站已经打开的断口,把不安全的断口给关闭。
四、 养成写开发文档的习惯:
对于每一个页面设计(前接页,后接页),包括功能说明,页面设计,页面名称,存放位置等,应当有相应的文档记载。对于发生改动的地方,需要保留原来的部分(注释或备份),并说明备份文件存放的地方,改动时间,修改人。
对于程序部分,应该有相应的设计流程,改动的时候,也需要设计改动流程图,以便以后进行对比,和查找问题所在位置,以及问题的严重性分析。
1.函数array()
功能:创建一个数组变量
格式:array(list)
参数:list 为数组变量中的每个数值列,中间用逗号间隔
例子:
<% i = array ("1","2","3") %>
结果: i 被赋予为数组
2.函数Cint()
功能:将一表达式/其它类型的变量转换成整数类型(int)
格式:Cint(expression)
参数:expression 是任何有效的表达式/其它类型的变量
例子:
<%
f = "234"
response.write cINT(f) + 2
%>
结果: 236
函数Cint()将字符"234"转换 成整数234.如果表达式为空, 或者无效时,返回值为0;
3.函数:Creatobject()
功能:创建及返回一个ActiveX对象.
格式:Creatobject(obname)
参数bname 是对象的名称
例子:
<%
Set con = Server.CreateObject("ADODB.Connection")
%>
结果:
4.函数Cstr()
功能:将一表达式/其它类型的变量转换成字符类型(string)
格式:Cstr(expression)
参数:expression是任何有效的表达式/其它类型的变量
例子:
<%
s = 3 + 2
response.write "The result is:" & cStr(s)
%>
结果:函数Cstr()将整数 5 转换 成字符"5".
5.函数Date()
功能:返回当前系统(server端)的日期
格式: Date()
参数:无
例子<% date () %>
结果:06/13/07
6.函数Dateadd()
功能:计算某个指定的时间和
格式: dateadd(timeinterval,number,date)
参数:timeinterval是时间单位(月,日..); number是时间间隔值,date是时间始点.
例子:
<%
currentDate = #6/13/07#
newDate = DateAdd("m",3,currentDate)
response.write newDate
%> <%
currentDate = #12:34:45 PM#
newDate = DateAdd("h",3,currentDate)
response.write newDate
%>
结果:
13/6/07
3:34:45 PM
其中
"m" = "month";
"d" = "day";
如果是currentDate 格式,则,
"h" = "hour";
"s" = "second";
7.函数Datediff()
功能:计算某量个指定的时间差
格式: datediff(timeinterval,date1,date2[,firstdayofweek[,firstdayofyear]])
参数: timeinterval 是时间单位; date1,date2是有效的日期表达式,firstdayofweek,firstdayofyear 是任意选项.
例子:
<%
fromDate = #8/4/99#
toDate = #1/1/2000#
response.write "There are " & _
DateDiff("d",fromDate,toDate) & _
" days to millenium from 8/4/99."
%>
结果:There are 150 days to millenium from 8/4/99.
8.函数day()
功能:返回一个整数值,对应于某月的某日
格式: day(date)
参数: date是一个有效的日期表达式;
例子<% =date(#8/4/99#) %>
结果:4
9.函数formatcurrency()
功能:转换成货币格式
格式: formatcurrency(expression [,digit[,leadingdigit[,paren[,groupdigit]]]])
参数: expression 是有效的数字表达式;digit表示小数点后的位数;leadingdigit,paren,groupdigit是任意选项.
例子<%=FormatCurrency(34.3456)%>
结果34.35
10.函数Formatdatetime()
功能:格式化日期表达式/变量
格式: formatdatetime(date[,nameformat])
参数: date为有效的日期表达式/变量;nameformat是指定的日期格式常量名称.
例子<% =formatdatetime("08/04/99",vblongdate) %>
结果:Wednesday,August 04,1999
说明:
--------------------------------------------------------------------------------
描述
返回表达式,此表达式已被格式化为日期或时间。
语法
FormatDateTime(Date[, NamedFormat])
FormatDateTime 函数的语法有以下参数:
参数 描述
Date 必选项。要被格式化的日期表达式。
NamedFormat 可选项。指示所使用的日期/时间格式的数值,如果省略,则使用 vbGeneralDate。
设置
NamedFormat 参数可以有以下值:
常数 值 描述
vbGeneralDate 0 显示日期和/或时间。如果有日期部分,则将该部分显示为短日期格式。如果有时间部分,则将该部分显示为长时间格式。如果都存在,则显示所有部分。
vbLongDate 1 使用计算机区域设置中指定的长日期格式显示日期。
vbShortDate 2 使用计算机区域设置中指定的短日期格式显示日期。
vbLongTime 3 使用计算机区域设置中指定的时间格式显示时间。
vbShortTime 4 使用 24 小时格式 (hh:mm) 显示时间。
说明
下面例子利用 FormatDateTime 函数把表达式格式化为长日期型并且把它赋给 MyDateTime:
Function GetCurrentDate
"FormatDateTime 把日期型格式化为长日期型。
GetCurrentDate = FormatDateTime(Date, 1)
End Function
--------------------------------------------------------------------------------
<script language=vbs>
for i=0 to 4
alert(" formatdatetime(now,"&i&") 的时候是:"&formatdatetime(now,i))
next
</script>
11.函数Isnumeric()
功能:返回一个布尔值,判断变量是否为数字变量,或者是可以转换成数字的其它变量.
格式:isnumeric(expression)
参数:expression 是任意的变量.
例子:
<%
i="234"
response.write isnumeric(i)
%>
结果: true.
12.函数Isobject()
功能:返回一个布尔值,判断变量是否为对象的变量,
格式: isobject(expression)
参数: expression 是任意的变量.
例子:
<%
set con =server.creatobject("adodb.connection")
response.write isobject(con)
%>
结果: true
13.函数:Lbound()
功能:返回一个数组的下界.
格式:Lbound(arrayname[,dimension])
参数:arrayname 是数组变量,dimension 是任意项
例子:
<%
i = array("1","2","3")
response.write lbound(i)
%>
结果:0
14.函数Lcase()
功能:将一字符类型变量的字符全部变换小写字符.
格式:Lcase(string)
参数:string是字符串变量
例子:
<%
str="THIS is Lcase!"
response.write Lcase(str)
%>
结果:this is lcase!
15.函数left()
功能:截取一个字符串的前部分;
格式:left(string,length)
参数:string字符串,length截取的长度.
例子: <% =left("this is a test!",6) %>
结果:this i
16.函数len()
功能:返回字符串长度或者变量的字节长度
格式:len(string *varname)
参数:string字符串;varname任意的变量名称
例子:
<%
strtest="this is a test!"
response.write len(strtest)
%>
结果:15
17.函数ltrim()
功能:去掉字符串前的空格.
格式:ltrim(string)
参数:string 字符串.
例子: <% =ltrim (" this is a test!")
结果:this is a test!
18.函数Mid()
功能:从字符串中截取字符串.
格式:mid(string,start [,length])
参数:string字符串,start截取的起点,length要截取的长度.
例子:
<%
strtest="this is a test, Today is Monday!"
response.write mid(strtest,17,5)
%>
结果:Today
19.函数minute()
功能:返回一数值, 表示分钟
格式:minute(time)
参数: time是时间变量
例子lt;% =minute(#12:23:34#) %>
结果:23
20.函数month()
功能:返回一数值, 表示月份
格式:month(time)
参数:time是日期变量
例子<% =month(#08/09/99) %>
结果:9
21.函数monthname()
功能:返回月份的字符串(名称).
格式:Monthname(date [,abb])
参数: date是日期变量,abb=true时 则月份的缩写,
例子:
<% =monthname(#4/5/99#) %>
结果:April
22.函数Now()
功能:返回系统的当前时间和日期.
格式:now()
参数:无
例子:
<% =now() %>
结果: 05/10/00 8:45:32 pm
23.函数:replace()
功能:在字符串中查找,替代指定的字符串.
格式:replace(strtobesearched,strsearchfor,strreplacewith [,start[,count[,compare]]])
参数:strtobesearched是字符串; strsearchfor是被查找的子字符串;strreplacewith 是用来替代的子字符串.start,count,compare 是任意选项.
例子:
<%
strtest="this is an apple."
response.write replace(strtest,"apple","orange")
%>
结果:this is an orange.
24.函数right()
功能:截取一个字符串的后部分
格式:right(string,length)
参数:string字符串,length截取的长度.
例子:
<%
strtest="this is a test!"
response.write right(strtest,3)
%>
结果:st!
25.函数rnd()
功能:返回一个随机数值
格式:rnd[(number)]
参数:number是任意数值.
例子:
<%
randomize()
response.write rnd()
%>
结果:0/1数值之一,无randomize(), 则不能产生随机数.
26.函数round()
功能:完整数值
格式:round(expression[,numright])
参数:expression数字表达式;numright任意选项.
例子:
<%
i=12.33654
response.write round(i)
%>
结果: 12
27.函数rtrim()
功能:去掉字符串后的空格.
格式:rtrim(string)
参数:string 是字符串
例子:
<%
response.write rtrim("this is a test! ")
%>
结果:this is a test!
28.函数second()
功能:返回一个整数值.
格式:second(time)
参数:time是一个有效的时间表达式;
例子lt;% =second(# 12:28:30#) %>
结果:30
29.函数strReverse()
功能:返回与原字符串排列逆向的字符串.
格式:strreverse(string)
参数:string是字符串
例子<% =strreverse("this is a test!")
结果:!tset a si siht
30.函数time()
功能:返回当前系统的时间值.
格式:time()
参数:无
结果:9:58:28 Am
31.函数trim()
功能:删去字符串前,后的空格.
格式:trim(string)
参数:string 字符串.
例子:
<%
strtest=" this is a test! "
response.write trim(strtest)
%>
结果:this is a test!
32.函数UBound()
功能:返回一个数组的上界.
格式:Ubound(expression [,dimension])
参数:expression 是数组表达式/数组变量,dimension 是任意项
例子:
<%
i = array("1","2","3")
response.write ubound(i)
%>
结果: 2
33.函数:UCase()
功能:将一字符类型变量的字符全部变换成大写字符.
格式:Ucase(string)
参数:string是字符串变量
例子:
<%
str="THIS is Lcase!"
response.write Lcase(str)
%>
结果:THIS IS LCASE!
34.函数Vartype()
功能:返回变量的常量代码(整数)
格式:Vartype(varname)
参数:varname是任何类型的变量名称.
例子:
<%
i=5
response.write vartype(i)
%>
结果:2 (2表示整数,须要参考ASP常量代码.)
35.函数Weekday()
功能:返回一个整数,对应一周中的第几天.
格式:Weekday(date [,firstofweek])
参数: date为日期变量,firstofweek为任选项.
例子:
<%
d= # 5/9/00 #
response.write weekday(d) %>
结果:3(3 表示是星期二)
36.函数weekdayname()
功能:返回字符串,对应星期几.
格式:weekdayname(weekday[,abb[,firstdayofweek]])
参数:weekday为日期变量,abb,firstdayofweek为任选项.
例子:
<%
d = #8/4/99#
response.write weekdayname(d)
%>
结果: Wednesday
37.函数year()
功能:返回日期表达式所在的年份.
格式:year(date)
参数: date是有效的日期表达式
例子:
<% =year(#8/9/99#) %>
结果:1999
38.函数Mod()功能:取余数.
例子:3 Mod 2
结果:1
在asp代码中分页是有点麻烦的事情,个人在在代码编写过程中把分页代码写成了两个函数,虽然在功能上不是很完善,但对于一般的应用应该是满足的了。
<%
'分页函数分为两个函数
'CalcPage(totalrec,msg_per_page,currentpage,n,rowcount,PageRs) 分页计算函数
'PageList(ListType,url,querry,Separator,ListLink) 分页列表函数
'分页计算函数
'totalrec 记录集总数
'msg_per_page 每页显示的记录数,在调用CalcPage时需提前对该变量赋值
'currentpage 当前页变量,在调用CalcPage时需提前对该变量赋值
'n 总页数
'rowcount 设置每一页的数据记录数
'PageRs 记录集对象
sub CalcPage(totalrec,msg_per_page,currentpage,n,rowcount,PageRs)
n=0 '设置无记录时页数为0
if currentpage="" then currentpage=0
'PageRs.EOF and PageRs.bof 无记录
'Not PageRs.EOF Or Not PageRs.BOF 有记录
if Not PageRs.EOF Or Not PageRs.BOF then
totalrec=PageRs.recordcount
PageRs.pagesize=msg_per_page
if totalrec mod msg_per_page = 0 then '计算总页数,recordcount:数据的总记录数
n = totalrec\msg_per_page 'n:总页数
else
n = totalrec\msg_per_page+1
end if
if not isnumeric(currentpage) or currentpage="" then currentpage=1
If currentpage <> "" then
currentpage = cint(currentpage)
end if
if currentpage < 1 then
currentpage = 1
end if
if currentpage*msg_per_page > totalrec and not((currentpage-1)*msg_per_page < totalrec) then
currentPage=1
end if
PageRs.absolutepage = currentpage 'absolutepage:设置指针指向某页开头
rowcount = PageRs.pagesize 'pagesize:设置每一页的数据记录数
end if
end sub
%>
<%
'分页列表函数
'url 跳转的地址
'querry ?后的参数
'Separator 分隔符
'ListType 分页类型
'类型:0 "第一页 | 前一页 | 下一页 | 最后页"
'类型:1 "1 | 2 | 3 | 4 | ..........| 下一页"
'类型:2 "第一页 | 前十页 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 后十页 | 最后页"
'ListLink 链接使用的样式
sub PageList(ListType,url,querry,Separator,ListLink)
if Separator="" then Separator="|"
if ListType="" then ListType="0"
select case ListType
case "0"
response.write"第"¤tpage&"/"&n&"页 "
response.write"共"&totalrec&"条信息 "
if currentpage <= 1 then
response.write"第一页 "&Separator&" "
response.write"前一页 "&Separator&" "
else
response.write"<a href="""&url&"?page=1&"&querry&""" class="""&ListLink&""">第一页</a> "&Separator&" "
response.write"<a href="""&url&"?page="¤tpage-1&"&"&querry&""" class="""&ListLink&""">前一页</a> "&Separator&" "
end if
if currentpage = n then
response.write"下一页 "&Separator&" "
response.write"最后页 "
else
response.write"<a href="""&url&"?page="¤tpage+1&"&"&querry&""" class="""&ListLink&""">下一页</a> "&Separator&" "
response.write"<a href="""&url&"?page="&n&"&"&querry&""" class="""&ListLink&""">最后页</a> "
end if
case "1"
if currentpage < n then
response.write"<a href="""&url&"?page="¤tpage+1&"&"&querry&""" class="""&ListLink&""">下一页</a> "
else
response.write"下一页 "
end if
for i=1 to n
if cstr(i)=cstr(currentpage) then
response.write "<b>"&i&"</b>"&" "&Separator&" "
else
response.write"<a href="""&url&"?page="&i&"&"&querry&""" class="""&ListLink&""">"&i&"</a> "&Separator&" "
end if
next
case "2"
PageMerCout=10 '每次可翻的最大页数
'取得记录的最大页码段
if n mod PageMerCout=0 then
MaxPageFiled=n\PageMerCout
else
MaxPageFiled=n\PageMerCout+1
end if
'判断当前页所在的页码段
if currentpage mod PageMerCout =0 then
CurrPageFiled=currentpage\PageMerCout
else
CurrPageFiled=currentpage\PageMerCout+1
end if
'取得当前页码段的最大页码和最小页码
MaxPageNo=CurrPageFiled*PageMerCout
MinPageNo=(CurrPageFiled-1)*PageMerCout+1
'输出 “第一页 | 前十页 |”
if currentpage<=1 then
response.write"第一页 "&Separator&" "
else
response.write"<a href="""&url&"?page=1&"&querry&""" class="""&ListLink&""">第一页</a> "&Separator&" "
end if
if CurrPageFiled<=1 then
response.write"前十页 "&Separator&" "
else
response.write"<a href="""&url&"?page="&MinPageNo-PageMerCout&"&"&querry&""" class="""&ListLink&""">前十页</a> "&Separator&" "
end if
'输出当前页码段
for i=MinPageNo to MaxPageNo
if i<=n then
if cstr(i)=cstr(currentpage) then
response.write "<b>"&i&"</b>"&" "&Separator&" "
else
response.write"<a href="""&url&"?page="&i&"&"&querry&""">"&i&"</a> "&Separator&" "
end if
end if
next
'输出 “后十页 | 最后页”
if CurrPageFiled>=MaxPageFiled then
response.write"后十页 "&Separator&" "
else
response.write"<a href="""&url&"?page="&MaxPageNo+1&"&"&querry&""" class="""&ListLink&""">后十页</a> "&Separator&" "
end if
if currentpage>=n then
response.write"最后页 "
else
response.write"<a href="""&url&"?page="&n&"&"&querry&""" class="""&ListLink&""">最后页</a> "
end if
end select
end sub
%>