最初写的:
1、可以实现的功能:
首页,末页,上一页,下一页以及指定页的跳转。
首页末页有自动隐藏的功能。
跳转下拉菜单动态显示当前页码和总页数。
2、原理
核心原理参考CodefusionMX附带的CompassTravel例子中tripdetail.cfm的翻页原理。即假设当前页为第6页,对数据库进行查询,返回数maxRows定为1,查上一页就是对小于6的数进行倒序查询,得出的结果是5,4,3...,因为只返回一个值,所以就得到了5。其他的同理。
3、使用方法
将代码放入要实现pagelist的地方,用查找替换修改里面的cfsnippets,centers和center_ID,把他们换成实际使用的数据库名,表名和字段名。
4、局限与不足
因为学cf不到一个星期,对cfml还不是很熟悉,所以有些代码还是很繁琐,我觉得不足的地方有:
(1)样式具有局限性,因为采用的是表单form,所以只能用button或图片来显示,不能用单纯的文字。
(2)修改还得要用查找替换。原来设想只改前面数据库定义的三个变量就可以,但后来发现在<cfout>里面使用查询的结果,必须要是确定的值,比如#gotopage.currentrow#,而不能再在里面使用动态参数,请问高手有什么好的解决办法?
<->
<cfsetdatabasename="cfsnippets"><->
<cfsettablename="centers"><->
<cfsettargetname="center_ID"><->
<->
<cfifIsDefined("Form.RecordID")><->
<cfqueryname="pageQuery"datasource="#databasename#"maxrows="1">
SELECT#targetname#FROM#tablename#
<cfifIsDefined("Form.btnPrev")><->
WHERE#targetname#<#Form.RecordID#
ORDERBY#targetname#DESC
<cfelseifIsDefined("Form.btnNext")><->
WHERE#targetname#>#Form.RecordID#
ORDERBY#targetname#
<cfelseifIsDefined("Form.btnFirst")><->
ORDERBY#targetname#
<cfelseifIsDefined("Form.btnLast")><->
WHERE#targetname#>#Form.RecordID#
ORDERBY#targetname#DESC
<cfelseifIsDefined("Form.goto")><->
WHERE#targetname#=#Form.goto#
</cfif>
</cfquery>
<cfifpageQuery.RecordCountis1>
<cflocationurl="#cgi.SCRIPT_NAME#?ID=#pageQuery.center_ID#"><->
<cfelse>
<cflocationurl="#cgi.SCRIPT_NAME#?ID=#page.RecordID#">
</cfif>
</cfif>
<->
<cfqueryname="gotopage"datasource="#databasename#">
SELECT#targetname#FROM#tablename#
</cfquery>
<cfoutputquery="gotopage">
<cfifgotopage.currentrowis1>
<cfsetfirstid=gotopage.center_ID><->
<cfelseifgotopage.currentrowisgotopage.recordcount>
<cfsetlastid=gotopage.center_ID><->
</cfif>
</cfoutput>
<->
<cfifisdefined("url.id")>
<cfsetpageid=url.id>
<cfelse>
<cfsetpageid=firstid>
</cfif>
<->
<formaction="#cgi.SCRIPT_NAME#"method="post">
<inputtype="hidden"name="RecordID"value="<cfoutput>#pageid#</cfoutput>"><->
<>
<cfifpageidneqfirstid>
<inputtype="submit"name="btnFirst"value="首页">
<inputtype="submit"name="btnPrev"value="上一页">
</cfif>
<>
<B>跳转到:</B>第<selectname="goto">
<cfoutputquery="gotopage">
<cfifgotopage.center_IDispageid>
<optionvalue="#gotopage.center_ID#"selected>#gotopage.currentrow#<->
<cfelse>
<optionvalue="#gotopage.center_ID#">#gotopage.currentrow#
</cfif>
</cfoutput>
</option></select>/<cfoutput>#gotopage.recordcount#</cfoutput>页
<inputname="Go"type="submit"value="GO">
<>
<cfifpageidneqlastid>
<inputtype="submit"name="btnNext"value="下一页">
<inputtype="submit"name="btnLast"value="末页">
</cfif>
</form>
后来发现不对劲,又进行了修改:
上面的代码只能用来list每页只有一个记录的page,如果一页有多个记录,上面的方法是不行的。
下面是我做了修改的代码,可以实现一个页面放多个记录了,每个页面放多少个记录可以在pagerow里面定义,此外也不需要通过查找替换来更改了,只要把初始化里面的四个参数定为自己相关的内容就行了,别的地方不需要改了。
代码比原来的又精简了不少:)
<->
<cfsetdatabasename="cfsnippets"><->
<cfsettablename="centers"><->
<cfsettargetname="center_ID"><->
<cfsetpagerow=1><->
<->
<cfifIsDefined("Form.thispage")><->
<cfifIsDefined("Form.btnPrev")><->
<cfsetpageQuery=#Form.thispage#-1>
<cfelseifIsDefined("Form.btnNext")><->
<cfsetpageQuery=#Form.thispage#+1>
<cfelseifIsDefined("Form.btnFirst")><->
<cfsetpageQuery=1>
<cfelseifIsDefined("Form.btnLast")><->
<cfsetpageQuery=#Form.lastpage#>
<cfelseifIsDefined("Form.goto")><->
<cfsetpageQuery=#Form.goto#>
</cfif>
<cflocationurl="#cgi.SCRIPT_NAME#?page=#pageQuery#"><->
</cfif>
<->
<cfqueryname="gotopage"datasource="#databasename#">
SELECT#targetname#FROM#tablename#
</cfquery>
<cfsetlastpage=#gotopage.recordcount#pagerow><->
<->
<cfifisdefined("url.page")>
<cfsetpageid=url.page>
<cfelse>
<cfsetpageid=1>
</cfif>
<->
<formaction=""method="post">
<inputtype="hidden"name="thispage"value="<cfoutput>#pageid#</cfoutput>"><->
<inputtype="hidden"name="lastpage"value="<cfoutput>#lastpage#</cfoutput>"><->
<>
<cfifpageidneq1>
<inputtype="submit"name="btnFirst"value="首页">
<inputtype="submit"name="btnPrev"value="上一页">
</cfif>
<>
<B>跳转到:</B>第<selectname="goto">
<cfloopindex="pagenumber"from="1"to="#lastpage#">
<cfoutput>
<cfif#pagenumber#ispageid>
<optionvalue="#pagenumber#"selected>#pagenumber#<->
<cfelse>
<optionvalue="#pagenumber#">#pagenumber#
</cfif>
</cfoutput>
</cfloop>
</option></select>/<cfoutput>#lastpage#</cfoutput>页
<inputname="Go"type="submit"value="GO">
<>
<cfifpageidneqlastpage>
<inputtype="submit"name="btnNext"value="下一页">
<inputtype="submit"name="btnLast"value="末页">
</cfif>
</form>
呵呵,一个菜鸟版的pagelist终于完成,十分简单,用的方法也挺笨的。