2009/02/26

[ColdFusion]ページング

下の本と同時並行でその下の本も、emacsのタイピング用として使っています。



で、上の本では、dreamweaverと連携したcoldfusionの開発を紹介しているのですがソースがほとんどかかれていなくて、サンプルプログラムの中に、ページングに関する、項目があったので、自作するとどうなるのかなーと思い、ちょっと考えてみました。

<cfparam name="form.flg" default="0">
<cfparam name="form.startrow" default="1">
<cfparam name="form.endrow" default="10">
<cfparam name="pageup" default="10">

<cfquery name="lq" datasource="test">
<--- クエリーを記述 --->
</cfquery>

<cfset lq_total = lq.recordcount>
<cfswitch expression="#form.flg#">
<!--- 先頭へ --->
<cfcase value="1">
<cfset form.startrow = "1">
<cfset form.endrow = "10">
</cfcase>
<!--- 前へ --->
<cfcase value="2">
<cfset form.startrow = form.startrow - pageup>
<cfset form.endrow = form.startrow + pageup - 1>
</cfcase>
<!--- 次へ --->
<cfcase value="3">
<cfset form.startrow = form.endrow + 1>
<cfset form.endrow = form.endrow + pageup>
</cfcase>
<!--- 最後へ --->
<cfcase value="4">
<cfif Right(lq_total,1) eq "0">
<cfset form.startrow = lq_total - pageup + 1>
<cfelse>
<cfset form.startrow = left(lq_total,Len(lq_total)-1)&"1">
</cfif>
<cfset form.endrow = lq_total>
</cfcase>
</cfswitch>

<cfif form.endrow gt lq_total>
<cfset form.endrow = lq_total>
</cfif>

<html>
<head>
<title>test</title>
</head>
<body>
<cfoutput>
#lq_total#件中:#form.startrow#件~#form.endrow#まで表示しています。

<table>
<cfloop query="lq" startrow="#form.startrow#"
endrow="#form.endrow#">
<--- クエリーを表示 --->
</cfloop>
<tr>
<td colspan="3">
<cfif form.startrow gt 1>
<a href="javascript:lf_go(1);">先頭へ</a>
<a href="javascript:lf_go(2);">前へ</a>
</cfif>
<cfif form.endrow lt lq_total>
<a href="javascript:lf_go(3);">次へ</a>
<a href="javascript:lf_go(4);">最後へ</a>
</cfif>
</td>
</tr>
</table>

<form name="frm" action="./test.cfm" method="post">
<input type="hidden" name="flg" value="">
<input type="hidden" name="startrow" value="#form.startrow#">
<input type="hidden" name="endrow" value="#form.endrow#">
</form>
<script type="text/javascript">
function lf_go(amode){
with(document.frm){
flg.value = amode;
submit();
}
}
</script>
</cfoutput>
</body>
</html>

「最後へ」は、問い合わせの一番最後のページに進み、「最初へ」は、問い合わせの一番最初のページに進むような仕様にしています。

こうやって、フォーマットしていっかい開発しておけば、後で、ある程度使い回しが効くので便利かなと

0 コメント:

コメントを投稿