2009-05-14 19:56:35

【cfloop】1つ以上の条件が満たされるまで、一連の命令や出力表示を繰り返す

テーマ:ColdFusionのタグ
cfloopタグは、以下のループがサポートされています。

  • インデックスループ
  • 条件付きループ
  • 日付または時刻の範囲に対するループ
  • クエリーに対するループ
  • リストまたはファイルに対するループ
  • COM コレクションまたは構造体に対するループ

よく使うのは、「インデックスループ」です。
1から100まで足す場合は、以下のようになります。

01: <cfset gokei = 0>
02: <cfloop index="i" from="1" to="100">
03:     <cfset gokei = gokei + i>
04: </cfloop>

次は「クエリーに対するループ」です。
こちらの最後の方で、cfoutputタグでのクエリを使う例を示しましたが、cfloopとcfoutputの組み合わせでは、以下のようになります。

01: <cfoutput>
02: <cfloop query = "GetCourses">
03:     #Dept_ID# #CorName# #CorLevel#<br>
04: </cfloop>
05: </cfoutput>

cfloopの中にcfoutputを入れてもよいです。

01: <cfloop query = "GetCourses">
02:     <cfoutput>#Dept_ID# #CorName# #CorLevel#<br></cfoutput>
03: </cfloop>

処理としては同じですが、表示用のソースを作成する際に、下のほうが無駄な空白がありません。ただし、処理の前に以下を宣言してください。

01: <cfsetting enableCFoutputOnly = "yes">

これは、cfoutputタグで囲まれた部分だけをhtmlソースとして出力します。携帯サイトを作る際には、下のようにするか、最後にまとめて空白をなくすような処理をします。個人的には携帯サイトはほとんど作らないので、上のようにやっています。


その次は、「リストまたはファイルに対するループ」です。
以下はリストを表示する例です。

01: <cfloop index="i" list="a,b,c,d">
02:     <cfoutput>#i#</br></cfoutput>
03: </cfloop>

実は、こちらも同じです。

01: <cfloop index="i" list="a,,b,,,c,d">
02:     <cfoutput>#i#</br></cfoutput>
03: </cfloop>

ColdFusionのリストは、データがないものは無視しています。
上も下も3番目の要素はcです。
このことを知ったときはびっくりしました。変な仕様です。
”存在するデータだけ取り出す”という意味では、よいかもしれません。


次は、「COMコレクションまたは構造体に対するループ」です。
「COMコレクション」は使ったことがありませんが、構造体はあります。

01: <cfset st = structNew()>
02: <cfset st.jp = "japan">
03: <cfset st.us = "america">
04: <cfset st.uk = "english">
05: 
06: <cfloop item="i" collection="#st#">
07:     <cfoutput>#i# - #StructFind(st, i)#<br></cfoutput>
08: </cfloop>

最後に、「日付または時刻の範囲に対するループ」です。
実は使ったことがありません。


以下はCFのリファレンスからです。

次の例では、今日の日付から今日の日付に 30 日を加えた日付まで、一度に 7 日ずつループして、日付を表示します。

01: <cfset startDate = Now()>
02: <cfset endDate = Now() + 30>
03: <cfloop from="#startDate#" to="#endDate#" index="i" step="#CreateTimeSpan(7,0,0,0)#">
04: <cfoutput>#dateformat(i, "mm/dd/yyyy")#<br /></cfoutput>
05: </cfloop>

次の例では、夜中の 0 時から 23 時 59 分 59 秒まで、時間を 30 分ずつ加算して表示します。

01: <cfset startTime = CreateTime(0,0,0)>
02: <cfset endTime = CreateTime(23,59,59)>
03: <cfloop from="#startTime#" to="#endTime#" index="i" step="#CreateTimeSpan(0,0,30,0)#">
04:     <cfoutput>#TimeFormat(i, "hh:mm tt")#<br /></cfoutput>
05: </cfloop>

なるほど!。30分でなく13分ずつ加算という場面があったら、こっちが楽ですね。
使えば便利というものがあっても、ついついよく使うやりかたでやってしまいます。

ColdFusionは奥が深い!!


cfloopのドキュメントはこちらです(cf7)。
AD
いいね!した人  |  コメント(0)  |  リブログ(0)

うたらぼさんの読者になろう

ブログの更新情報が受け取れて、アクセスが簡単になります

コメント

[コメントをする]

コメント投稿

AD

Ameba人気のブログ

Amebaトピックス

      ランキング

      • 総合
      • 新登場
      • 急上昇
      • トレンド

      ブログをはじめる

      たくさんの芸能人・有名人が
      書いているAmebaブログを
      無料で簡単にはじめることができます。

      公式トップブロガーへ応募

      多くの方にご紹介したいブログを
      執筆する方を「公式トップブロガー」
      として認定しております。

      芸能人・有名人ブログを開設

      Amebaブログでは、芸能人・有名人ブログを
      ご希望される著名人の方/事務所様を
      随時募集しております。