首先,我对ColdFusion很新,但我很快就学会了。所以我正在尝试构建一个大型数据库,该数据库最初显示每页25行的所有结果,并有一个next / prev链接来浏览页面。
一切正常,但是当我执行搜索时,当新结果显示大约几页值时,分页链接不起作用。当我点击“下一个”链接时,它会返回到原始的所有记录显示。我该如何解决这个问题或者我需要做些什么才能使其工作?
抱歉,我是新来的,这是我的第一个。希望这更好。
我的分页代码......
<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>
如果您需要了解更多信息,请告诉我。谢谢。
答案 0 :(得分:1)
这是一个我掀起的例子(对不起,如果它是简洁的),它涵盖了你已经与Mark讨论过的事情。我也喜欢上面的Mark <cfloop>
示例(下面)。大声笑......这种反应最终会在哪里结束。
所以我们有:
使用额外的pageNum querystring为您的下一组记录(我认为这是您想要的)。
然后它会在您的页面中显示如下:
<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>
答案 1 :(得分:0)
你需要展示你在代码中实际导航的方式 - 秘密酱埋在哪里。你拥有所需的一切(可能比你需要的更多)。
您的代码中某处可能有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()
。
答案 2 :(得分:-1)
我使用带有BACK - MORE - HOME提交按钮的cfform标签来解决这个问题。
第一页有ID 1到25的查询和一个MORE提交按钮。 隐藏的字段是计数25
下一页有HOME和MORE按钮 家里有一个隐藏的领域1 更多的隐藏字段为+ 25(50)
下一页有BACK HOME和MORE按钮 后面有隐藏的计数领域--25 HOME有一个隐藏的领域1 MORE有一个隐藏的计数字段+25(75)
等等。
查询使用隐藏字段的编号,具体取决于SUBMIT按钮的值来创建查询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>