最初寫的:
1、可以實現(xiàn)的功能: 首頁,末頁,上一頁,下一頁以及指定頁的跳轉(zhuǎn)。 首頁末頁有自動隱藏的功能。 跳轉(zhuǎn)下拉菜單動態(tài)顯示當前頁碼和總頁數(shù)。
2、原理
核心原理參考Codefusion MX 附帶的Compass Travel例子 中tripdetail.cfm的翻頁原理。即假設當前頁為第6頁,對數(shù)據(jù)庫進行查詢,返回數(shù)maxRows 定為1,查上一頁就是對小于6的數(shù)進行倒序查詢,得出的結(jié)果是5,4,3...,因為只返回一個值,所以就得到了5。其他的同理。
3、使用方法
將代碼放入要實現(xiàn)pagelist的地方,用查找替換修改里面的cfsnippets,centers和center_ID,把他們換成實際使用的數(shù)據(jù)庫名,表名和字段名。
4、局限與不足
因為學cf不到一個星期,對cfml還不是很熟悉,所以有些代碼還是很繁瑣,我覺得不足的地方有: (1)樣式具有局限性,因為采用的是表單form,所以只能用button或圖片來顯示,不能用單純的文字。 (2)修改還得要用查找替換。原來設想只改前面數(shù)據(jù)庫定義的三個變量就可以,但后來發(fā)現(xiàn)在<cfout>里面使用查詢的結(jié)果,必須要是確定的值,比如#gotopage.currentrow#,而不能再在里面使用動態(tài)參數(shù),請問高手有什么好的解決辦法?
<!--- 數(shù)據(jù)庫定義 ---> <cfset databasename="cfsnippets"><!--- 數(shù)據(jù)庫名 ---> <cfset tablename="centers"><!--- 表名 ---> <cfset targetname="center_ID"><!--- 字段名(一般為ID),定義這里的同時,還要用查找替換所有g(shù)otopage.center_ID里面的center_ID --->
<!--- 處理跳轉(zhuǎn)的動作 ---> <cfif IsDefined("Form.RecordID")><!--- 判斷是否有跳轉(zhuǎn)請求 ---> <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#"><!--- 跳轉(zhuǎn) ---> <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>
<!-- 頁數(shù) ,跳轉(zhuǎn)--> <B>跳轉(zhuǎn)到: </B>第<select name="goto"> <cfoutput query="gotopage"> <cfif gotopage.center_ID is pageid> <option value="#gotopage.center_ID#" selected>#gotopage.currentrow#<!--- 使本頁的數(shù)字處于被選擇狀態(tài) ---> <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>
后來發(fā)現(xiàn)不對勁,又進行了修改:
上面的代碼只能用來list每頁只有一個記錄的page,如果一頁有多個記錄,上面的方法是不行的。
下面是我做了修改的代碼,可以實現(xiàn)一個頁面放多個記錄了,每個頁面放多少個記錄可以在pagerow里面定義,此外也不需要通過查找替換來更改了,只要把初始化里面的四個參數(shù)定為自己相關(guān)的內(nèi)容就行了,別的地方不需要改了。
代碼比原來的又精簡了不少 :)
<!--- 初始化 ---> <cfset databasename="cfsnippets"><!--- 數(shù)據(jù)庫名 ---> <cfset tablename="centers"><!--- 表名 ---> <cfset targetname="center_ID"><!--- 字段名(一般為ID) ---> <cfset pagerow=1><!--- 每頁記錄數(shù) ---> <!--- 處理跳轉(zhuǎn)的動作 ---> <cfif IsDefined("Form.thispage")><!--- 判斷是否有跳轉(zhuǎn)請求 ---> <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#"><!--- 跳轉(zhuǎn) ---> </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> <!-- 頁數(shù) ,跳轉(zhuǎn)--> <B>跳轉(zhuǎn)到: </B>第<select name="goto"> <cfloop index="pagenumber" from="1" to="#lastpage#"> <cfoutput> <cfif #pagenumber# is pageid> <option value="#pagenumber#" selected>#pagenumber#<!--- 使本頁的數(shù)字處于被選擇狀態(tài) ---> <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終于完成,十分簡單,用的方法也挺笨的。
出處:藍色理想
責任編輯:無意
◎進入論壇網(wǎng)絡編程版塊參加討論
|