Forms 使用表单的分页持久性(就地)

Forms 使用表单的分页持久性(就地),forms,coldfusion,pagination,Forms,Coldfusion,Pagination,我试图弄清楚如何在使用表单过滤查询后使分页工作。我已经设置了一个页面,其中设置为显示所有结果,然后是一个3个下拉列表的形式来过滤结果。我将其设置为每页显示25行,并带有上一页/下一页链接。执行搜索后,单击“上一步/下一步”时,返回显示所有结果。我仍在努力学习CF,我一直在寻找和尝试不同的东西来让它工作。我在寻找一个简单的例子或一些方向,我可以学习如何做这一部分。我试着缩短它。如果您需要查看更多代码,请告诉我 下面是一些代码 <cfparam name="FORM.persType" typ

我试图弄清楚如何在使用表单过滤查询后使分页工作。我已经设置了一个页面,其中设置为显示所有结果,然后是一个3个下拉列表的形式来过滤结果。我将其设置为每页显示25行,并带有上一页/下一页链接。执行搜索后,单击“上一步/下一步”时,返回显示所有结果。我仍在努力学习CF,我一直在寻找和尝试不同的东西来让它工作。我在寻找一个简单的例子或一些方向,我可以学习如何做这一部分。我试着缩短它。如果您需要查看更多代码,请告诉我

下面是一些代码

<cfparam name="FORM.persType" type="string" default="%">
<cfquery name="r" datasource="#datasourcename#">
    SELECT *
    FROM Table
    WHERE
    Sector LIKE '#FORM.persType#'
    ORDER BY ID
</cfquery>

<!--- pagination setup --->
<cfset perpage = 25>
<cfparam name="url.start" default="1">
<cfif not isNumeric(url.start) or url.start lt 1 or url.start gt r.recordCount or  round(url.start) neq url.start>
    <cfset url.start = 1>
</cfif>

<cfset totalPages = ceiling(r.recordCount / perpage)>
<cfset thisPage = ceiling(url.start / perpage)>
<cfset thisPage = Int(start / 25) + 1>

Here's the output and pagination part...
<cfoutput query="r" startrow-"#url.start#" maxrows="#perpage#">
<tr>
    <td>#r.reqStatus#</td>
    <td>#r.lastName#</td>
    <td>#r.firstName#</td>
</tr>
</cfoutput>
</table>

<!--- Pagination --->
[
<cfif url.start gt 1>
<cfset link = cgi.script_name & "?start=" & (url.start - perpage)>
<cfoutput><a href="#link#">Previous Page</a></cfoutput>
<cfelse>
Previous Page
</cfif>
/
<cfif (url.start + perpage - 1) lt r.recordCount>
<cfset link = cgi.script_name & "?start=" & (url.start + perpage)>
<cfoutput><a href="#link#">Next Page</a></cfoutput>
<cfelse>
Next Page
</cfif>
]

谢谢你在这方面的帮助…:

凯瑟琳-这是你以前问过的同一个问题和同一个答案。每个分页链接都需要传递搜索参数。每个请求都是新请求,必须重新筛选

这里有一条线索可以让你开始:

在执行LIKE查询的顶部,将代码更改为以下内容:

<cfparam name="FORM.persType" type="string" default="%">
<cfif structkeyexists(url,'persType')>
    <cfset FORM.perstype = url.persType/>
</cfif>
<cfset link = cgi.script_name & "?start=" & (url.start - perpage) & "&persType=" & FORM.perstype/>
这将允许您提交表单元素或url元素-它们在CF中被视为单独的作用域

然后,在分页部分将分页链接更改为以下内容:

<cfparam name="FORM.persType" type="string" default="%">
<cfif structkeyexists(url,'persType')>
    <cfset FORM.perstype = url.persType/>
</cfif>
<cfset link = cgi.script_name & "?start=" & (url.start - perpage) & "&persType=" & FORM.perstype/>
确保并对表示分页的每个链接执行此操作

完成后,您将传递用户为persType选择的任何内容以及每个分页链接,这将允许您的查询成功重新运行并进行筛选


还有一个注意事项——在你的描述中,你说你正在通过三个下拉列表进行过滤。每个下拉列表都是单独的变量,需要像上面的模式一样传递。祝你好运

凯瑟琳-这是你以前问过的同一个问题和同一个答案。每个分页链接都需要传递搜索参数。每个请求都是新请求,必须重新筛选

这里有一条线索可以让你开始:

在执行LIKE查询的顶部,将代码更改为以下内容:

<cfparam name="FORM.persType" type="string" default="%">
<cfif structkeyexists(url,'persType')>
    <cfset FORM.perstype = url.persType/>
</cfif>
<cfset link = cgi.script_name & "?start=" & (url.start - perpage) & "&persType=" & FORM.perstype/>
这将允许您提交表单元素或url元素-它们在CF中被视为单独的作用域

然后,在分页部分将分页链接更改为以下内容:

<cfparam name="FORM.persType" type="string" default="%">
<cfif structkeyexists(url,'persType')>
    <cfset FORM.perstype = url.persType/>
</cfif>
<cfset link = cgi.script_name & "?start=" & (url.start - perpage) & "&persType=" & FORM.perstype/>
确保并对表示分页的每个链接执行此操作

完成后,您将传递用户为persType选择的任何内容以及每个分页链接,这将允许您的查询成功重新运行并进行筛选


还有一个注意事项——在你的描述中,你说你正在通过三个下拉列表进行过滤。每个下拉列表都是单独的变量,需要像上面的模式一样传递。祝你好运

子孙后代的幸福。这是我的答案…:我忙于工作

它规定:

新参数集 一个新的baseURL变量 一个允许基于我在本地拥有的表进行筛选的表单 所以这只是一个完整系统的思想食粮。再次为子孙后代,因为你标记了另一个答案作为解决方案

<cfparam name="url.pageNum" default="1">
<cfparam name="url.isDraft" default="-1">
<cfparam name="url.showNav" default="-1"> 

<cfquery name="q" datasource="#application.dsn#">
SELECT * 
FROM table  <!--- you may need more than just a simple select.--->
WHERE 1=1
<cfif url.isDraft eq 0>
AND isDraft = 0
</cfif>
<cfif url.showNav eq 0>
AND showNav = 0
</cfif>                   
</cfquery>

<cfoutput>
<form action="" method="get">
    <lable>Filter Pages that are still being drafted</lable>
    <select name="isDraft">
        <option value="-1">Pick One</option>
        <option value="1" <cfif url.isDraft eq 1>selected</cfif>>Yes</option>
        <option value="0" <cfif url.isDraft eq 0>selected</cfif>>No</option>
    </select>
    <label>Filter Pages that Should or should not show up in nagivation</label>
    <select name="showNav">
        <option value="-1">Pick One</option>
        <option value="1" <cfif url.showNav eq 1>selected</cfif>>Yes</option>
        <option value="0" <cfif url.showNav eq 0>selected</cfif>>No</option>
    </select>      
    <input type="submit" name="" value="submit">
</form><br>
</cfoutput>

<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 )>

<!--- PaginationBaseUrl will change --->

<cfif url.isDraft eq 1 OR url.showNav eq 0>
    <cfset setBaseLink='./?isDraft='&url.isDraft&'&showNav='&url.showNav&'&'>
<cfelse>
    <cfset setBaseLink='./?'>
</cfif> 

<cfset loopercount = round( q.recordCount/10 )>

<cfoutput>
    <cfloop from="1" to="#looperCount#" index="i">
            <a href="#setBaseLink#pageNum=#i#">#i#</a>
    </cfloop>
</cfoutput> 

<br><br>

<cfoutput
    query="q" 
    startrow="#startRow#"
    maxrows="#maxRows#">

    #id#<br>

</cfoutput>

为子孙后代着想。这是我的答案…:我忙于工作

它规定:

新参数集 一个新的baseURL变量 一个允许基于我在本地拥有的表进行筛选的表单 所以这只是一个完整系统的思想食粮。再次为子孙后代,因为你标记了另一个答案作为解决方案

<cfparam name="url.pageNum" default="1">
<cfparam name="url.isDraft" default="-1">
<cfparam name="url.showNav" default="-1"> 

<cfquery name="q" datasource="#application.dsn#">
SELECT * 
FROM table  <!--- you may need more than just a simple select.--->
WHERE 1=1
<cfif url.isDraft eq 0>
AND isDraft = 0
</cfif>
<cfif url.showNav eq 0>
AND showNav = 0
</cfif>                   
</cfquery>

<cfoutput>
<form action="" method="get">
    <lable>Filter Pages that are still being drafted</lable>
    <select name="isDraft">
        <option value="-1">Pick One</option>
        <option value="1" <cfif url.isDraft eq 1>selected</cfif>>Yes</option>
        <option value="0" <cfif url.isDraft eq 0>selected</cfif>>No</option>
    </select>
    <label>Filter Pages that Should or should not show up in nagivation</label>
    <select name="showNav">
        <option value="-1">Pick One</option>
        <option value="1" <cfif url.showNav eq 1>selected</cfif>>Yes</option>
        <option value="0" <cfif url.showNav eq 0>selected</cfif>>No</option>
    </select>      
    <input type="submit" name="" value="submit">
</form><br>
</cfoutput>

<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 )>

<!--- PaginationBaseUrl will change --->

<cfif url.isDraft eq 1 OR url.showNav eq 0>
    <cfset setBaseLink='./?isDraft='&url.isDraft&'&showNav='&url.showNav&'&'>
<cfelse>
    <cfset setBaseLink='./?'>
</cfif> 

<cfset loopercount = round( q.recordCount/10 )>

<cfoutput>
    <cfloop from="1" to="#looperCount#" index="i">
            <a href="#setBaseLink#pageNum=#i#">#i#</a>
    </cfloop>
</cfoutput> 

<br><br>

<cfoutput
    query="q" 
    startrow="#startRow#"
    maxrows="#maxRows#">

    #id#<br>

</cfoutput>

好的,Catherine…我正在寻找你的新代码库。感谢您提出了一个新问题,并提供了代码,使事情变得更简单+向你致意。一定要解决问题并结束。不想让S.O.变成一个讨论论坛的坟墓,有很多没有答案的悬而未决的问题-好的,Catherine…我正在寻找你的新代码库。感谢您提出了一个新问题,并提供了代码,使事情变得更简单+向你致意。一定要解决问题并结束。不想让S.O.变成一个讨论论坛的坟墓,有很多没有答案的悬而未决的问题-谢谢,谢谢,谢谢!!这就是我需要的。现在,让其他DDL开始工作:再次感谢你!不客气,很高兴我们能帮忙。你已经上路了!:谢谢,谢谢,谢谢!!这就是我需要的。现在,让其他DDL开始工作:再次感谢你!不客气,很高兴我们能帮忙。你已经上路了!:谢谢你,弗兰克,我一定也会试试这个。我喜欢有选择+1基于此,我有一个简短的问题…不确定这是否是一个简单的解决方案,但当我进行搜索时,URL保持不变,我无法执行其他搜索。有没有办法终止第一次搜索或刷新页面,以便进行多次搜索?@CatherineL我为您添加了一些内容。请注意,顶部的cfparams现在设置为-1,并且在表单字段中设置了其他选项。选项为“选择一个”,这些选项的值设置为t
o'-1'。当您单击“上一步”选择一个时,您将看到您的分页修复程序本身……我认为这将为您提供一些额外的工作。谢谢您,Frank,我肯定也会尝试这一个。我喜欢有选择+1基于此,我有一个简短的问题…不确定这是否是一个简单的解决方案,但当我进行搜索时,URL保持不变,我无法执行其他搜索。有没有办法终止第一次搜索或刷新页面,以便进行多次搜索?@CatherineL我为您添加了一些内容。请注意,顶部的cfparams现在设置为-1,并且在表单字段中设置了其他选项。选项为“选择一个”,这些选项的值设置为“-1”。当您单击“返回”以“选择一个”时,您将看到您的分页修复程序本身……我认为这将为您提供一些额外的工作。