Coldfusion和分页
首先,我对ColdFusion非常陌生,但我的学习速度非常快。因此,我正在尝试构建一个大型数据库,该数据库最初显示每页25行的所有结果,并具有下一个/ prev链接来浏览页面。Coldfusion和分页
这一切都很好,但是当我执行搜索,并且当新的结果显示大约几页的值时,分页链接不起作用。当我点击“下一个”链接时,它会回到原始的所有记录显示。我该如何解决这个问题,或者我需要做些什么才能使其工作?
对不起,我是新的发布,这是我的第一个。希望这是更好的。
我分页代码...
<cfset Next = StartRow + DisplayRows>
<cfset Previous = StartRow - DisplayRows>
<cfoutput>
<cfif Previous GTE 1>
<a href="#CGI.Script_Name#?StartRow=#Previous#"><b>Previous #DisplayRows# Records</b></a>
<cfelse>
Previous Records
</cfif>
<b> | </b>
<cfif Next lte records.RecordCount>
<a href="#CGI.Script_Name#?StartRow=#Next#"><b>Next
<cfif (records.RecordCount - Next) lt DisplayRows>
#Evalute((records.RecordCount - Next)+1)#
<cfelse>
#DisplayRows#
</cfif>Records</b></a>
<cfelse> Next Records
</cfif>
<cfoutput>
我在上面的代码...
<cfparam name="StartRow" default="1">
<cfparam name="DisplayRows" default="25">
<cfset ToRow = StartRow + (DisplayRows - 1)>
<cfif ToRow gt records.RecordCount>
<cfset ToRow = records.RecordCount>
</cfif>
让我知道如果你需要看到更多...谢谢。
这是我掀起的一个例子(对不起,如果它是简洁的),它涵盖了你已经与马克讨论过的东西。我也喜欢马克的<cfloop>
上面的例子(下面)。大声笑......这种反应何时结束。
因此,我们有:
- 查询总记录(最大)
- 在你的范围
- 在你的射程结束开始 每页
那看起来就这样在你的页面:
<cfparam name="pageNum" default="1">
<cfquery name="q" datasource="#application.dsn#">
select * from yourTable
</cfquery>
<cfset maxRows = 10>
<cfset startRow = min((pageNum-1) * maxRows+1, max(q.recordCount,1))>
<cfset endRow = min(startRow + maxRows-1, q.recordCount)>
<cfset totalPages = ceiling(q.recordCount/maxRows)>
<cfset loopercount = round(q.recordCount/10)>
<cfoutput>
<cfloop from="1" to="#looperCount#" index="i">
<a href="?pageNum=#i#">#i#</a>
</cfloop>
</cfoutput>
<br><br>
<cfoutput
query="q"
startrow="#startRow#"
maxrows="#maxRows#">
#id#<br>
</cfoutput>
感谢这个代码...这是一个很好的设置,是我可以肯定的工作。 :) – CatherineL 2014-12-05 13:48:13
@CatherineL不客气!我想有一个简化/完整的软件包将是有用的:)编辑...此外,如果这解决了你的特殊问题点击我甜蜜的绿色复选框! – 2014-12-05 14:20:33
我会点击绿色的支票,但这并没有真正解决我的问题。当我点击下一页或数字时,它仍会重置为所有结果。我仍在搞清楚如何做到这一点。 – CatherineL 2014-12-08 14:46:20
你需要展示你是如何在你的代码中进行导航的 - 这就是隐藏秘密酱的地方。你有你需要的一切(也许比你需要的更多)。
你可能在你的代码中有一个cfoutput或cfloop。你会用你的STARTROW和displayrows输出行的一组数记录 - 像这样:
<Cfoutput query="records" startrow="#next#" maxrows="#displayrows#">
... code to output your data goes here
</cfoutput>
如果您正在使用CFLOOP是相似的。
<Cfloop query="records" startrow="#next#" endrow="#next+displayrows#">
...code to output your data.
</cfloop>
您也可以使用索引循环,像这样:
<cfloop from="#next#" to="#next+displayrows#" index="x">
.... your outputs will look like this:
#records[columname][x]#
</cfoutput>
希望这些样品的人会按门铃。您放入代码片段的逻辑只是创建一个起点并定义多少个循环。这是输出记录要显示的记录。
另请注意评论 - 你差不多从来没有在你的代码中需要evaluate()
。
我现在的方式是像你列出的第一个。有没有更好的方法来做到这一点? – CatherineL 2014-12-03 15:02:52
重读你的问题凯瑟琳,它似乎也许你没有传递搜索参数。每个新页面的链接都需要重新运行_search query_ - 因此您需要确保在分页链接中包含搜索变量。也许这是你的问题? – 2014-12-03 15:08:29
好吧,我在想那个,但不知道该怎么做那部分......有没有一种简单的方法/如何做到这一点的例子?或者你能指导我到哪里我可以找到如何做到这一点? – CatherineL 2014-12-03 15:18:33
我工作了这一点,使用CFFORM标签与BACK - 更多 - HOME提交按钮。
第一页有查询ID 1到25和更多提交按钮。 隐藏字段是计数25
下一个页面有HOME和更多的按钮 首页有1 更多隐藏字段有计数的隐藏字段+ 25(50)
下一个页面有返回首页和多个按钮 回到了计数的隐藏字段 - 25 HOME具有1 MORE隐藏字段有计数+ 25(75)
等的隐藏字段。
查询根据使用的提交按钮的值的隐藏字段的数目创建查询WHERE和输出的25行
<cfif submit IS "NEXT">
<cfset count1 = #count# + 1>
<cfset count2 = #count# + 25>
<cfelseif submit is "BACK">
<cfset count1 = #count# - 26>
<cfset count2 = #count#>
<cfelseif submit is "HOME">
<cfset count1 = 1>
<cfset count2 = 25>
</cfif>
在查询
SELECT *
FROM mytabl
WHERE ID BETWEEN #count1# AND #count2#
显示
<table>
<cfoutput query="myquery">
<tr>
<td>
#my data1#
</td>
<td>
#my data2#
</td>
</cfoutput>
</tr>
<table>
不要假设id是连续的,因为如果记录被删除,分页逻辑会中断。该代码可能显示的记录太少或根本没有。另外,总是使用'cfqueryparam'。它使用绑定变量来防止SQL注入并提高性能。 – Leigh 2014-12-05 14:07:04
我不知道为什么我停靠试图有帮助。既然如此,你可能会为第25条记录做好准备,而你的隐藏可能是最后一个ID ......我只是想给CatherineL一个起点...... – Andy 2014-12-05 21:26:52
我投下了这个票,因为它不正确,将无法可靠地工作。再加上sql将数据库暴露给sql注入。隐藏领域的方法遭受同样的逻辑问题。 ID值!=记录号码。虽然帮助总是值得赞赏,但提供准确的信息非常重要。特别是对那些新的语言。 – Leigh 2014-12-05 22:58:16
您需要张贴一些代码。不是整个脚本,只是与分页相关的部分。 – Leigh 2014-12-03 13:51:59
你不需要评估() - #(records.recordcount - next)+ 1#会输出很好。 – 2014-12-03 14:48:54
我会将您的页面参数更改为“PageNumber”而非“StartRow”,从用户角度来看,链接到pagenumbers而非startvern是有意义的。 – Jarede 2014-12-03 14:51:02