Coldfusion MX PageList 基础入门教程
最初写的: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"><!---字段名(一般为ID),定义这里的同时,还要用查找替换所有gotopage.center_ID里面的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>
<!---获取首页与末页所对应的ID--->
<cfqueryname="gotopage"datasource="#databasename#">
SELECT#targetname#FROM#tablename#
</cfquery>
<cfoutputquery="gotopage">
<cfifgotopage.currentrowis1>
<cfsetfirstid=gotopage.center_ID><!---首页对应的ID--->
<cfelseifgotopage.currentrowisgotopage.recordcount>
<cfsetlastid=gotopage.center_ID><!---末页对应的ID--->
</cfif>
</cfoutput>
<!---获取本页所对应的ID,如没有传递,默认为首页ID--->
<cfifisdefined("url.id")>
<cfsetpageid=url.id>
<cfelse>
<cfsetpageid=firstid>
</cfif>
<!---翻页主体部分--->
<formaction="#cgi.SCRIPT_NAME#"method="post">
<inputtype="hidden"name="RecordID"value="<cfoutput>#pageid#</cfoutput>"><!---隐藏字段传送本页ID--->
<!--首页/上一页-->
<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"><!---字段名(一般为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><!---末页页码--->
<!---获取本页页码,如没有传递,默认为1--->
<cfifisdefined("url.page")>
<cfsetpageid=url.page>
<cfelse>
<cfsetpageid=1>
</cfif>
<!---翻页主体部分--->
<formaction=""method="post">
<inputtype="hidden"name="thispage"value="<cfoutput>#pageid#</cfoutput>"><!---隐藏字段传送本页ID--->
<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终于完成,十分简单,用的方法也挺笨的。
本文地址:http://www.45fan.com/a/question/12829.html