Coldfusion MX PageList 菜鸟版教程

最初写的:

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终于完成,十分简单,用的方法也挺笨的。

(0)

相关推荐

  • Coldfusion MX PageList 菜鸟版教程

    最初写的: 1.可以实现的功能: 首页,末页,上一页,下一页以及指定页的跳转. 首页末页有自动隐藏的功能. 跳转下拉菜单动态显示当前页码和总页数. 2.原理 核心原理参考Codefusion MX 附带的Compass Travel例子 中tripdetail.cfm的翻页原理.即假设当前页为第6页,对数据库进行查询,返回数maxRows 定为1,查上一页就是对小于6的数进行倒序查询,得出的结果是5,4,3...,因为只返回一个值,所以就得到了5.其他的同理. 3.使用方法 将代码放入要实现pa

  • Coldfusion MX PageList之骨灰版

    你要的功能都在这里,注意是PAGELIST,这是CCF核心代码之一,相信能比我这代码还少的PAGELIST少了.功能绝对没有打折扣.包括 pagelist 首页/末页,上页/下页, 页码可以设置显示数字多少,这避免了数量一多起来把pagelist拉的好长....  在调用PAGELIST的源文件中定义下面这些变量:  <cfset rowsperpage=10> <!---每页显示记录的数量-----> <cfparam name="URL.startrow&quo

  • ColdFusion MX 远程服务实例入门教程

    这个教程分二个部分:1 创建CF组件2创建flash应用.在开始之前请新建一个站点.一 创建CF组件:这里我们创建一个组件 定义二个函数[chaxun1,chaxun2],函数使用exampleapps 数据库源,返回一个查询结果对象, flash电影文件调用组件方法和接收返回的查询结果.chaxun1函数需要三个参数,这些参数从flash电影中传递过来.(参数为xing ming cheng)    创建的步奏如下所示: 使用dwmx(Dreamweaver MX的简称,下同), 文件→新建:

  • ColdFusion MX 轻松制作 FLASH的方法第1/3页

    一 简介 自从ColdFusion(以下简称CF)被Macromedia公司收购了以后,MM公司将CF在FLASH应用又提升了一个层次,利用CF可以动态的和FLASH集成.其中最长用的是HARPOON,但是CF在FLASH图表方面的作用却很少有人知道.今天我要讲的就是FLASH在CF中最被看好的特性之一,内建图表. 首先我们需要工具,动态的生成FLASH图表全靠Macromedia Generator,Generator是FLASH输出服务器用来发动CF制图的引擎.Generator制图一般的过

  • Coldfusion MX技巧精华收集(1)第1/5页

    Coldfusion 结合 Access 中文显示问题 作者: Kyle 12/11/02 内容: 首先,在每一页要传递和处理中文的页面顶部加上如下代码(也可以放在application.cfm里,但在有些情况下会有问题): <cfprocessingdirective pageencoding="gb2312">  <cfcontent type="text/html; charset=gb2312">  <cfset setEnco

  • windows server2016安装MySQL5.7.19解压缩版教程详解

    记录了MySQL 5.7.19 winx64解压缩版安装教程,具体内容如下 系统环境:Win7 x64 软件准备:mysql 5.7.19 winx64 下载网址:https://dev.mysql.com/downloads/mysql/ 配置安装流程 具体安装如下: 1.把 mysql-5.7.19-winx64.zip 压缩文件解压到 C:\MySQL\ 目录下: 2.在 C:\MySQL\ 目录下新建 my.ini 配置文件: 3.用文本编辑器或其他编辑器打开 my.ini 文件,把以下

  • 华众虚拟主机管理系统 6.0全能破解版+教程

    华众虚拟主机管理系统 6.0全能破解版+教程 本压缩包里面包括全部HZHOST 6.0的全部6.0的文件! 是破解后的文件,里面包含HZHOST 6.0主控端,HZHOST 6.0被控端,HZHOST 6.0的许可证程序,HZHOST 5.2-6.0的升级程序,详细见里面的每个压缩包,压缩包里面的每个SYS32文件为安装6.0的时候所需要的系统文件: 下面介绍一下大致的安装步骤(强烈申明,本软件大家下载后作为个人测试使用,不要用商业用途,不然后果自负 :) 1,下在本软件所有压缩包.并解压. 2

  • 基于Bootstrap框架菜鸟入门教程(推荐)

    Bootstrap菜鸟入门教程 Bootstrap简介 Bootstrap,来自 Twitter,是目前最受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加快捷. 一.栅格系统 栅格系统的工作原理: "行(row)"必须包含在 .container (固定宽度)或 .container-fluid (100% 宽度)中,以便为其赋予合适的排列(aligment)和内补(padding). 通过"行(ro

  • Django admin实现图书管理系统菜鸟级教程完整实例

    Django 有着强大而又及其易用的admin后台,在这里,你可以轻松实现复杂代码实现的功能,如搜索,筛选,分页,题目可编辑,多选框. 简单到,一行代码就可以实现一个功能,而且模块之间耦合得相当完美. 不信,一起来看看吧!?用Django实现管理书籍的系统,并能在前台界面对书籍进行增删查改,筛选,分页,以及批量查询修改功能. 准备工作 #准备好你的数据库模型思维导图 0.新建一个Django项目,起名为books,并且同时新建一个应用book11 1.首先要设置models模块,根据思维导图,我

  • window环境配置Mysql 5.7.21 windowx64.zip免安装版教程详解

    1.从官网下载mysql-5.7.21-windowx64.zip mysql下载页面 2.解压到合适的位置(E:\mysql) 这名字是我改过的 3.配置环境变量,将E:\mysql\bin 添加到PATH中 4.在mysql目录下(E:\mysql) 创建 my.ini文件,内容如下: [mysql] # 设置mysql客户端默认字符集 default-character-set=utf8 [mysqld] #设置3306端口 port = 3306 # 设置mysql的安装目录 based

随机推荐