当前位置: 首页 > 图文教程 > 脚本技术 > ColdFusion > Coldfusion MX PageList 菜鸟版教程

ColdFusion
ColdFusionMX 编程指南 安装教程
ColdFusionMX 编程指南 基础管理操作以及入门程
ColdFusionMX 编程指南 ColdFusionMX编程入门
ColdFusionMX 编程指南 ColdFusionMX Basic Tag编程
ColdFusionMX 编程指南 ColdFusionMX中的循环
Coldfusion MX技巧精华收集(1)
Coldfusion MX技巧精华收集之2
ColdFusion MX 轻松制作 FLASH的方法
Coldfusion MX PageList之骨灰版
Coldfusion MX广告轮换系统制作教程
用Coldfusion生成 OFFICE 文件的代码
Coldfusion MX PageList 菜鸟版教程
ColdfusionMX与FlashMX通讯的方法
收藏的ColdFusionMX应用技巧及问题集
ColdFusion与FLASH通信轻松入门教程
ColdFusion MX 远程服务实例入门教程

ColdFusion 中的 Coldfusion MX PageList 菜鸟版教程


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2010-01-10   浏览: 128 ::
收藏到网摘: n/a

最初写的:
1、可以实现的功能:
首页,末页,上一页,下一页以及指定页的跳转。
首页末页有自动隐藏的功能。
跳转下拉菜单动态显示当前页码和总页数。
2、原理
核心原理参考Codefusion MX 附带的Compass Travel例子 中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#,而不能再在里面使用动态参数,请问高手有什么好的解决办法?


<!--- 数据库定义 --->
<cfset databasename="cfsnippets"><!--- 数据库名 --->
<cfset tablename="centers"><!--- 表名 --->
<cfset targetname="center_ID"><!--- 字段名(一般为ID),定义这里的同时,还要用查找替换所有gotopage.center_ID里面的center_ID --->
<!--- 处理跳转的动作 --->
<cfif IsDefined("Form.RecordID")><!--- 判断是否有跳转请求 --->
<cfquery name="pageQuery" datasource="#databasename#" maxrows="1">
SELECT #targetname# FROM #tablename#
<cfif IsDefined("Form.btnPrev")><!--- 前一页页码 --->
WHERE #targetname# < #Form.RecordID#
ORDER BY #targetname# DESC
<cfelseif IsDefined("Form.btnNext")><!--- 后一页页码 --->
WHERE #targetname# > #Form.RecordID#
ORDER BY #targetname#
<cfelseif IsDefined("Form.btnFirst")><!--- 首页页码 --->
ORDER BY #targetname#
<cfelseif IsDefined("Form.btnLast")><!--- 末页页码 --->
WHERE #targetname# > #Form.RecordID#
ORDER BY #targetname# DESC
<cfelseif IsDefined("Form.goto")><!--- 指定页码 --->
WHERE #targetname# = #Form.goto#
</cfif>
</cfquery>
<cfif pageQuery.RecordCount is 1>
<cflocation url="#cgi.SCRIPT_NAME#?ID=#pageQuery.center_ID#"><!--- 跳转 --->
<cfelse>
<cflocation url="#cgi.SCRIPT_NAME#?ID=#page.RecordID#">
</cfif>
</cfif>
<!--- 获取首页与末页所对应的ID --->
<cfquery name="gotopage" datasource="#databasename#" >
SELECT #targetname# FROM #tablename#
</cfquery>
<cfoutput query="gotopage">
<cfif gotopage.currentrow is 1>
<cfset firstid=gotopage.center_ID><!--- 首页对应的ID --->
<cfelseif gotopage.currentrow is gotopage.recordcount>
<cfset lastid=gotopage.center_ID><!--- 末页对应的ID --->
</cfif>
</cfoutput>
<!--- 获取本页所对应的ID,如没有传递,默认为首页ID --->
<cfif isdefined("url.id")>
<cfset pageid=url.id>
<cfelse>
<cfset pageid=firstid>
</cfif>
<!--- 翻页主体部分 --->
<form action="#cgi.SCRIPT_NAME#" method="post">
<input type="hidden" name="RecordID" value="<cfoutput>#pageid#</cfoutput>"><!--- 隐藏字段传送本页ID --->
<!-- 首页/上一页-->
<cfif pageid neq firstid>
<input type="submit" name="btnFirst" value="首页">
<input type="submit" name="btnPrev" value="上一页">
</cfif>
<!-- 页数 ,跳转-->
<B>跳转到: </B>第<select name="goto">
<cfoutput query="gotopage">
<cfif gotopage.center_ID is pageid>
<option value="#gotopage.center_ID#" selected>#gotopage.currentrow#<!--- 使本页的数字处于被选择状态 --->
<cfelse>
<option value="#gotopage.center_ID#">#gotopage.currentrow#
</cfif>
</cfoutput>
</option></select>/<cfoutput >#gotopage.recordcount#</cfoutput>页
<input name="Go" type="submit" value="GO">
<!-- 末页/下一页-->
<cfif pageid neq lastid>
<input type="submit" name="btnNext" value="下一页">
<input type="submit" name="btnLast" value="末页">
</cfif>
</form>

后来发现不对劲,又进行了修改:
上面的代码只能用来list每页只有一个记录的page,如果一页有多个记录,上面的方法是不行的。
下面是我做了修改的代码,可以实现一个页面放多个记录了,每个页面放多少个记录可以在pagerow里面定义,此外也不需要通过查找替换来更改了,只要把初始化里面的四个参数定为自己相关的内容就行了,别的地方不需要改了。
代码比原来的又精简了不少 :)

<!--- 初始化 --->
<cfset databasename="cfsnippets"><!--- 数据库名 --->
<cfset tablename="centers"><!--- 表名 --->
<cfset targetname="center_ID"><!--- 字段名(一般为ID) --->
<cfset pagerow=1><!--- 每页记录数 --->
<!--- 处理跳转的动作 --->
<cfif IsDefined("Form.thispage")><!--- 判断是否有跳转请求 --->
<cfif IsDefined("Form.btnPrev")><!--- 前一页页码 --->
<cfset pageQuery=#Form.thispage#-1>
<cfelseif IsDefined("Form.btnNext")><!--- 后一页页码 --->
<cfset pageQuery=#Form.thispage#+1>
<cfelseif IsDefined("Form.btnFirst")><!--- 首页页码 --->
<cfset pageQuery=1>
<cfelseif IsDefined("Form.btnLast")><!--- 末页页码 --->
<cfset pageQuery=#Form.lastpage#>
<cfelseif IsDefined("Form.goto")><!--- 指定页码 --->
<cfset pageQuery=#Form.goto#>
</cfif>
<cflocation url="#cgi.SCRIPT_NAME#?page=#pageQuery#"><!--- 跳转 --->
</cfif>
<!--- 获取末页页码 --->
<cfquery name="gotopage" datasource="#databasename#" >
SELECT #targetname# FROM #tablename#
</cfquery>
<cfset lastpage=#gotopage.recordcount#\pagerow><!--- 末页页码 --->
<!--- 获取本页页码,如没有传递,默认为1 --->
<cfif isdefined("url.page")>
<cfset pageid=url.page>
<cfelse>
<cfset pageid=1>
</cfif>
<!--- 翻页主体部分 --->
<form action="" method="post">
<input type="hidden" name="thispage" value="<cfoutput>#pageid#</cfoutput>"><!--- 隐藏字段传送本页ID --->
<input type="hidden" name="lastpage" value="<cfoutput>#lastpage#</cfoutput>"><!--- 隐藏字段传送末页页码 --->
<!-- 首页/上一页-->
<cfif pageid neq 1>
<input type="submit" name="btnFirst" value="首页">
<input type="submit" name="btnPrev" value="上一页">
</cfif>
<!-- 页数 ,跳转-->
<B>跳转到: </B>第<select name="goto">
<cfloop index="pagenumber" from="1" to="#lastpage#">
<cfoutput>
<cfif #pagenumber# is pageid>
<option value="#pagenumber#" selected>#pagenumber#<!--- 使本页的数字处于被选择状态 --->
<cfelse>
<option value="#pagenumber#">#pagenumber#
</cfif>
</cfoutput>
</cfloop>
</option></select>/<cfoutput >#lastpage#</cfoutput>页
<input name="Go" type="submit" value="GO">
<!-- 末页/下一页-->
<cfif pageid neq lastpage>
<input type="submit" name="btnNext" value="下一页">
<input type="submit" name="btnLast" value="末页">
</cfif>
</form>

呵呵,一个菜鸟版的pagelist终于完成,十分简单,用的方法也挺笨的。