Coldfusion和Pagination

时间:2014-12-03 13:33:16

标签: search coldfusion pagination

首先,我对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>

如果您需要了解更多信息,请告诉我。谢谢。

3 个答案:

答案 0 :(得分:1)

这是一个我掀起的例子(对不起,如果它是简洁的),它涵盖了你已经与Mark讨论过的事情。我也喜欢上面的Mark <cfloop>示例(下面)。大声笑......这种反应最终会在哪里结束。

所以我们有:

  • query recordcount(max)
  • 从您的范围开始
  • 以您的范围结束
  • 每页输出

使用额外的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>