0

以下のコードがColdFusionページにあります。このページには、ページごとに25レコードのページ付けがある以下のクエリのデータが表示されます。ここで、ユーザーが位置IDを入力して検索を押すことができるように、テキストボックスと検索ボタンを提供する必要があります。ここで問題となっているのは、位置IDがたとえば7ページ目にある場合にnページを表示する方法です。 200ページの。ご意見をお聞かせください。ありがとう

<cfquery name="qry_postn_detail" datasource="mbtran">
    select distinct position_id,schedule_group,accrual_profile,pay_rule_name,rest_days
    from kronos_if.position_detail  
    order by position_id 
</cfquery>

<cfset perpage = 25>

<cfparam name="url.start" default="1">
<cfif not isNumeric(url.start) or url.start lt 1 or url.start gt qry_postn_detail.recordCount or round(url.start) neq url.start>
    <cfset url.start = 1>
</cfif>

<cfset totalPages = ceiling(qry_postn_detail.recordCount / perpage)>
<cfset thisPage = ceiling(url.start / perpage)>

<cfset thisPage = Int(start / 25) + 1>

Page<cfoutput>
<cfloop from="1" to="#totalPages#" index="i">
    <cfif i is thisPage>
        #i#
    <cfelse>
        <cfif totalPages lte 5 or i is 1 or i is totalPages or (i gt thisPage - 3 and i lt thisPage + 3) or ((thisPage is 1 or thisPage is 2) and i lt 6) >
            <a href="?start=#(i*25)-24#">#i#</a>
        <cfelse>
            <cfif i is 2 or i is totalPages - 1>
                ...
            </cfif>
        </cfif>
     </cfif>
 </cfloop>
 </cfoutput>
4

1 に答える 1

1

あなたのコメントに基づいて、あなたがする必要があるのは、検索フォームの送信時にクエリに検索パラメータを含めることだけだと思います。その場合、クエリ結果には、検索したものと一致するレコードのみが含まれ、ページネーションコードは以前と同じように機能しますが、今回は一致したレコードに対してのみ機能します。

したがって、クエリは次のようになります。

<cfquery name="qry_postn_detail" datasource="mbtran">
    select distinct position_id,schedule_group,accrual_profile,pay_rule_name,rest_days
    from kronos_if.position_detail 
    <cfif IsDefined("form.searchfield") AND IsValid("integer", form.searchfield)>
        where position_id = <cfqueryparam cfsqltype="cf_sql_integer" value="#form.searchfield#">
    </cfif>
    order by position_id 
</cfquery>

注:position_idはテーブル内の整数であると想定しています。実際のタイプに基づいて、cfqueryparamタイプと検証ロジックを適切に変更する必要があります。

以下のコメントに投稿された新しい質問からの更新

これは、JavaScriptを使用して特定のページにジャンプする方法の簡単な例です。あなたはすでにselectページ番号の入った箱を持っていると言いました。あなたがする必要があるのはonChangeあなたのタグにイベントハンドラーをselect追加し、URLに追加された選択された値でページをリロードするJavaScript関数を呼び出すことです。

あなたselectはこのように見えるでしょう:

<select name="page" onChange="jump(this.value);">
    <option value="101">101</option>
    <option value="102">102</option>
    <option value="103">103</option>
    <option value="104">104</option>
</select>

簡単なJavaScriptの例は次のようになります。

<script language="JavaScript">
    function jump(pagenum) {
        document.location.href("?start="+pagenum);
    }
</script>

ColdFusionページに渡されるすべての値を検証/サニタイズすることを忘れないでください。

于 2012-10-03T15:21:54.473 に答える