coldfusion
CFLOOP How-To
수색…
비고
큰 덕분에
- Pete Freitag의 CFScript 치트 시트
- CF 11의 Adam Cameron : CFScript의 CFLOOP는 Very Broken입니다 (여전히 CF 2016에 있습니다).
CFML 태그를 사용하여 컬렉션을 반복합니다.
<!--- Define collection --->
<cfset attributes = {
"name": "Sales",
"type": "text",
"value": "Connection"
}>
<!---
cfloop tag with attribute collection can be used to
loop through the elements of a structure
--->
<cfloop collection=#attributes# item="attribute">
<cfoutput>
Key : #attribute#, Value : #attributes[attribute]#
</cfoutput>
</cfloop>
CFSCRIPT를 사용하여 컬렉션을 반복합니다.
<cfscript>
/*define collection*/
attributes = {
"name": "Sales",
"type": "text",
"value": "Connection"
};
for(attribute in attributes){
/* attribute variable will contain the key name of each key value pair in loop */
WriteOutput('Key : ' & attribute & ', Value : ' & attributes[attribute] & '<br/>');
}
</cfscript>
색인
매개 변수
| 속성 | 필수 | 유형 | 태만 | 기술 |
|---|---|---|---|---|
| 색인 | 참된 | 끈 | 루프 색인의 변수 이름입니다. variables 범위 기본값. | |
| ...에서 | 참된 | 숫자의 | 인덱스의 시작 값입니다. | |
| 에 | 참된 | 숫자의 | 인덱스의 종료 값입니다. | |
| 단계 | 그릇된 | 숫자의 | 1 | 반복마다 색인을 증가 또는 감소시킬 값입니다. |
기본 인덱스 루프
x최종 값은 10입니다.
<!--- Tags --->
<cfoutput>
<cfloop index="x" from="1" to="10">
<li>#x#</li>
</cfloop>
</cfoutput>
<!--- cfscript --->
<cfscript>
for (x = 1; x <= 10; x++) {
writeOutput('<li>' & x & '</li>');
}
</cfscript>
<!--- HTML Output --->
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
2 단계로 증가
x최종 값은 11입니다.
<!--- Tags --->
<cfoutput>
<cfloop index="x" from="1" to="10" step="2">
<li>#x#</li>
</cfloop>
</cfoutput>
<!--- cfscript --->
<cfscript>
for (x = 1; x <= 10; x += 2) {
writeOutput('<li>' & x & '</li>');
}
</cfscript>
<!--- HTML Output --->
- 1
- 3
- 5
- 7
- 9
1 씩 단계 감소
x최종 값은 0입니다.
<!--- Tags --->
<cfoutput>
<cfloop index="x" from="10" to="1" step="-1">
<li>#x#</li>
</cfloop>
</cfoutput>
<!--- cfscript --->
<cfscript>
for (x = 10; x > 0; x--) {
writeOutput('<li>' & x & '</li>');
}
</cfscript>
<!--- HTML Output --->
- 10
- 9
- 8
- 7
- 6
- 5
- 4
- 3
- 2
- 1
함수에서의 CFLoop
함수 내에서 인덱스를
var또는local범위로 지정하십시오.Foo()는 11을 반환합니다.
<!--- var scope --->
<cffunction name="foo" access="public" output="false" returntype="numeric">
<cfset var x = 0 />
<cfloop index="x" from="1" to="10" step="1">
<cfset x++ />
</cfloop>
<cfreturn x />
</cffunction>
<!--- Local scope --->
<cffunction name="foo" access="public" output="false" returntype="numeric">
<cfloop index="local.x" from="1" to="10" step="1">
<cfset local.x++ />
</cfloop>
<cfreturn local.x />
</cffunction>
ColdFusion 11에서 현재까지
cfscript 함수
cfloop은 독립 실행 형 카운터 메커니즘으로index를 지원하지 않습니다.
조건
태그 구문
매개 변수
| 속성 | 필수 | 유형 | 태만 | 기술 |
|---|---|---|---|---|
| 조건 | 참된 | 끈 | 루프를 관리하는 조건. < , > 또는 = 과 같은 수학 기호를 포함 할 수 없습니다. 마찬가지로하여 ColdFusion 텍스트 구현을 사용해야 less than , lt , greater than , gt , equals 또는 eq . |
x 최종 값은 5입니다.
<cfset x = 0 />
<cfoutput>
<cfloop condition="x LT 5">
<cfset x++ />
<li>#x#</li>
</cfloop>
</cfoutput>
생성 된 HTML
또한 HTML의 각 행 사이에 줄 바꿈이 있습니다.
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
CFScript
ColdFusion 8 이전 버전
<cfscript>
x = 0;
while (x LT 5) {
x = x + 1;
writeOutput('<li>' & x & '</li>');
}
</cfscript>
현재의 ColdFusion 8
<cfscript>
x = 0;
while (x LT 5) {
x = x++;
writeOutput('<li>' & x & '</li>');
}
</cfscript>
ColdFusion 11에서 현재까지
cfscript 함수
cfloop은condition지원하지 않습니다.
생성 된 HTML
cfscript 출력은 모두 한 줄에 표시됩니다.
<li>one</li><li>two</li><li>three</li><li>four</li>
날짜 또는 시간 범위
날짜 또는 시간 범위의 예입니다.
질문
city , statecode 및 zipcode 열이 들어 있고 80,000 개가 넘는 레코드가있는 테이블 dbo.state_zip 생각해보십시오.
매개 변수
| 속성 | 필수 | 유형 | 태만 | 기술 |
|---|---|---|---|---|
| 질문 | 참된 | 끈 | 쿼리 개체의 변수 이름입니다. | |
| 시동을 걸다 | 그릇된 | 숫자의 | 쿼리 개체의 시작 행 인덱스입니다. | |
| 엔 드로우 | 그릇된 | 숫자의 | 쿼리 개체의 끝나는 행 인덱스입니다. | |
| 그룹 | 그릇된 | 끈 | 레코드를 그룹화 할 쿼리 열 이름입니다. |
검색어 예
<cfquery name="geo" datasource="reotrans-dev">
SELECT city, stateCode, zipCode
FROM dbo.state_zip
</cfquery>
태그 구문
쿼리 객체 geo 를 cfloop 의 소스로 사용. dbo.state_zip 테이블에는 많은 레코드가 있으므로 생성 된 HTML에는 상당한 시간이 걸립니다. 이 예제는 처음 20 레코드의 HTML 만 보여줍니다.
<cfoutput>
<ul>
<cfloop query="geo">
<!--- Scope the column names with the query name. --->
<li>#geo.city# | #geo.stateCode# | #geo.zipCode#</li>
</cfloop>
</ul>
</cfoutput>
생성 된 HTML
<ul>
<li>100 PALMS | CA | 92274</li>
<li>1000 PALMS | CA | 92276</li>
<li>12 MILE | IN | 46988</li>
<li>1ST NATIONAL BANK OF OMAHA | NE | 68197</li>
<li>29 PALMS | CA | 92277</li>
<li>29 PALMS | CA | 92278</li>
<li>3 STATE FARM PLAZA | IL | 61710</li>
<li>3 STATE FARM PLAZA | IL | 61791</li>
<li>30TH STREET | PA | 19104</li>
<li>3M CORP | MN | 55144</li>
<li>65TH INFANTRY | PR | 00923</li>
<li>65TH INFANTRY | PR | 00924</li>
<li>65TH INFANTRY | PR | 00929</li>
<li>65TH INFANTRY | PR | 00936</li>
<li>7 CORNERS | VA | 22044</li>
<li>88 | KY | 42130</li>
<li>9 MILE POINT | LA | 70094</li>
<li>A A R P INS | PA | 19187</li>
<li>A A R P PHARMACY | CT | 06167</li>
<li>A H MCCOY FEDERAL BLDG | MS | 39269</li>
</ul>
출력을 특정 행으로 제한
쿼리의 출력을 특정 행 범위로 제한하려면 startrow 및 endrow 지정 endrow .
<cfloop query="geo" startrow="100" endrow="150">
<li>#geo.city# | #geo.stateCode# | #geo.zipCode#</li>
</cfloop>
그룹화 출력
예제 데이터에서 각 주와 연관된 여러 도시와 관련하여 동일한 상태가 여러 번 나열되었습니다. 또한 각 도시와 연관된 여러 우편 번호와 관련하여 동일한 도시가 여러 번 표시되는 것을 볼 수 있습니다.
먼저 출력을 상태별로 그룹화합시다. stateCode 그룹화 된 내용 아래에 출력 될 내용을 감싸는 cfloop 의 두 번째 인스턴스를 확인하십시오.
<cfoutput>
<ul>
<cfloop query="geo" group="stateCode">
<!--- Scope the column names with the query name. --->
<li>#geo.stateCode#
<ul>
<cfloop>
<li>#geo.city# | #geo.zipCode#</li>
</cfloop>
</ul>
</li>
</cfloop>
</ul>
</cfoutput>
그룹화 된 하나의 cfloop 태그에서 HTML (추출)을 생성합니다.
<ul>
<li>AK
<ul>
<li>KONGIGANAK | 99545</li>
<li>ADAK | 99546</li>
<li>ATKA | 99547</li>
<!-- etc. -->
</ul>
</li>
<li>AL
<ul>
<li>ALEX CITY | 35010</li>
<li>ALEXANDER CITY | 35010</li>
<li>ALEX CITY | 35011</li>
<!-- etc. -->
</ul>
</li>
<!-- etc. -->
</ul>
마지막으로 city 별로 zipCode 항목을 모두 보려면 stateCode , city 별로 출력을 stateCode 하십시오. 이제 두 번째 cfloop 이 city 별로 그룹화되고 세 번째 cfloop 이 존재하여 zipCode 데이터가 출력됩니다.
<cfoutput>
<ul>
<cfloop query="geo" group="stateCode">
<li>#geo.stateCode#
<ul>
<cfloop group="city">
<li>#geo.city#
<ul>
<cfloop>
<li>#geo.zipCode#</li>
</cfloop>
</ul>
</li>
</cfloop>
</ul>
</li>
</cfloop>
</ul>
</cfoutput>
그룹화 된 두 개의 cfloop 태그에서 HTML (추출)을 생성합니다.
<ul>
<li>AK
<ul>
<li>ADAK
<ul>
<li>99546</li>
<li>99571</li>
</ul>
</li>
<li>AKHIOK
<ul>
<li>99615</li>
</ul>
</li>
<!--- etc. --->
<li>BARROW
<ul>
<li>99723</li>
<li>99759</li>
<li>99789</li>
<li>99791</li>
</ul>
</li>
<!--- etc. --->
</ul>
</li>
<!--- stateCodes etc. --->
</ul>
CFScript
현재의 ColdFusion 6 (MX)
<cfscript>
for (x = 1; x LTE geo.recordcount; x = x + 1) {
writeOutput( '<li>' & geo.city[x] & ' | ' &
geo.stateCode[x] & ' | ' & geo.zipCode[x] & '</li>');
}
</cfscript>
현재의 ColdFusion 8
<cfscript>
for (x = 1; x <= geo.recordcount; x++) {
writeOutput( '<li>' & geo.city[x] & ' | ' &
geo.stateCode[x] & ' | ' & geo.zipCode[x] & '</li>');
}
</cfscript>
현재의 ColdFusion 10
FOR IN구문을 사용하면x는 행 인덱스가 아닌 쿼리 행 개체입니다.
<cfscript>
for (x in geo) {
writeOutput( '<li>' & x.city & ' | ' &
x.stateCode & ' | ' & x.zipCode & '</li>');
}
</cfscript>
현재의 ColdFusion 11
ColdFusion 11을 사용하면 대부분의 태그를 cfscript로 쓸 수 있습니다.
<cfscript>
cfloop(query: geo, startrow: 1, endrow: 2) {
writeOutput( '<li>' & geo.city & ' | ' &
geo.stateCode & ' | ' & geo.zipCode & '</li>');
}
</cfscript>
group .
<cfscript>
cfloop(query: geo, group: 'city') {
writeOutput( '<li>' & geo.city & '<ul>');
cfloop() { // no arguments, just as in the tag syntax.
writeOutput('<li>' & geo.zipCode & '</li>');
}
writeOutput('</ul></li>');
}
</cfscript>
명부
이 목록을 고려하십시오.
<cfset foo = "one,two,three,four" />
태그 구문
매개 변수
| 속성 | 필수 | 태만 | 기술 |
|---|---|---|---|
| 명부 | 참된 | 리스트 객체. 변수는 평가되어야합니다 (##로 감싸 임). | |
| 색인 | 참된 | 리스트의 현재의 요소. |
<cfoutput>
<cfloop list="#foo#" index="x">
<li>#x#</li>
</cfloop>
</cfoutput>
생성 된 HTML
또한 HTML의 각 행 사이에 줄 바꿈이 있습니다.
<li>one</li>
<li>two</li>
<li>three</li>
<li>four</li>
CFScript
ColdFusion 8 이전 버전
<cfscript>
for (x = 1; x LTE listLen(foo); x = x + 1) {
writeOutput("<li>" & listGetAt(foo, x) & "</li>");
}
</cfscript>
현재의 ColdFusion 8
<cfscript>
for (x = 1; x <= listLen(foo); x++) {
writeOutput("<li>" & listGetAt(foo, x) & "</li>");
}
</cfscript>
현재의 ColdFusion 9
<cfscript>
for (x in foo) {
writeOutput("<li>" & x & "</li>");
}
</cfscript>
ColdFusion 11에서 현재까지
cfscript 함수
cfloop은list지원하지 않습니다.
생성 된 HTML
cfscript 출력은 모두 한 줄에 표시됩니다.
<li>one</li><li>two</li><li>three</li><li>four</li>
정렬
cfloop과 함께array객체를 직접 사용할 수있는 기능이 ColdFusion 8에 추가되었습니다.
이 배열을 고려하십시오.
<cfset aFoo = [
"one"
, "two"
, "three"
, "four"
] />
태그 구문
현재의 ColdFusion 8
속성 index 자체 사용
매개 변수
| 속성 | 필수 | 태만 | 기술 |
|---|---|---|---|
| 정렬 | 참된 | 배열 객체. 변수는 평가되어야합니다 (##로 감싸 임). | |
| 색인 | 참된 | 배열의 현재 요소입니다. |
<cfoutput>
<cfloop array="#aFoo#" index="x">
<li>#x#</li>
</cfloop>
</cfoutput>
생성 된 HTML
또한 HTML의 각 행 사이에 줄 바꿈이 있습니다.
<li>one</li>
<li>two</li>
<li>three</li>
<li>four</li>
현재를 통한 ColdFusion 2016
속성
item은 ColdFusion 2016에서cfloop의 동작을 변경합니다.
index 대신 또는 index 과 함께 속성 item 사용.
매개 변수
| 속성 | 필수 | 태만 | 기술 |
|---|---|---|---|
| 정렬 | 참된 | 배열 객체. 변수는 평가되어야합니다 (##로 감싸 임). | |
| 목 | 참된 | 배열의 현재 요소입니다. | |
| 색인 | 그릇된 | 배열의 현재 인덱스입니다. |
<cfoutput>
<cfloop array="#aFoo#" item="x" index="y">
<li>#x# | #y#</li>
</cfloop>
</cfoutput>
생성 된 HTML
또한 HTML의 각 행 사이에 줄 바꿈이 있습니다.
<li>one | 1</li>
<li>two | 2</li>
<li>three | 3</li>
<li>four | 4</li>
CFScript
ColdFusion 8 이전 버전
<cfscript>
for (i = 1; x LTE arrayLen(aFoo); i = i + 1) {
writeOutput("<li>" & aFoo[i] & "</li>");
}
</cfscript>
현재의 ColdFusion 8
<cfscript>
for (i = 1; i <= arrayLen(aFoo); i = i++) {
writeOutput("<li>" & aFoo[i] & "</li>");
}
</cfscript>
현재의 ColdFusion 9
FOR IN구문을 사용하면 x는 현재 배열 요소이며 배열 인덱스는 아닙니다.
<cfscript>
for (x in aFoo) {
writeOutput("<li>" & x & "</li>");
}
</cfscript>
ColdFusion 11에서 현재까지
cfscript 함수
cfloop은array지원하지 않습니다.
생성 된 HTML
cfscript 출력은 모두 한 줄에 표시됩니다.
<li>one</li><li>two</li><li>three</li><li>four</li>
파일
<cfloop list="#myFile#" index="FileItem" delimiters="#chr(10)##chr(13)#">
<cfoutput>
#FileItem#<br />
</cfoutput>
</cfloop>
구조
다음 구조를 고려하십시오.
<cfset stFoo = {
a = "one"
, b = "two"
, c = "three"
, d = "foue"
} />
태그 구문
매개 변수
index대신 속성item사용합니다.
| 속성 | 필수 | 유형 | 태만 | 기술 |
|---|---|---|---|---|
| 수집 | 참된 | 구조 | struct 객체입니다. 변수는 평가되어야합니다 (##로 감 쌉니다). | |
| 목 | 참된 | 끈 | 현재 구조 key , |
구조 함수 사용하기
<cfoutput>
<cfloop collection="#stFoo#" item="x">
<li>#structFind(stFoo, x)#</li>
</cfloop>
</cfoutput>
암시 적 구조 구문
<cfoutput>
<cfloop collection="#stFoo#" item="x">
<li>#stFoo[x]#</li>
</cfloop>
</cfoutput>
생성 된 HTML
또한 HTML의 각 행 사이에 줄 바꿈이 있습니다.
<li>one</li>
<li>two</li>
<li>three</li>
<li>four</li>
CFScript
FOR IN구문을 사용하면x는 구조체 객체의key입니다.
구조체의 키 출력
<cfscript>
for (x in stFoo) {
writeOutput("<li>" & x & "</li>");
}
</cfscript>
생성 된 HTML
<li>A</li><li>B</li><li>C</li><li>D</li>
구조체 키의 값을 출력합니다.
구조 함수 사용하기
<cfscript>
for (x in stFoo) {
writeOutput("<li>" & structFind(stFoo, x) & "</li>");
}
</cfscript>
암시 적 구조 구문
<cfscript>
for (x in stFoo) {
writeOutput("<li>" & stFoo[x] & "</li>");
}
</cfscript>
ColdFusion 11에서 현재까지
cfscript 함수
cfloop은collection지원하지 않습니다.
생성 된 HTML
cfscript 출력은 모두 한 줄에 표시됩니다.
<li>one</li><li>two</li><li>three</li><li>four</li>
인덱스 루프
from 및 to 속성을 사용하여 반복 발생 횟수를 지정하십시오. (선택적) step 속성을 사용하면 증분 크기를 결정할 수 있습니다.
<cfloop from="1" to="10" index="i" step="2">
<cfoutput>
#i#<br />
</cfoutput>
</cfloop>
조건부 루프
condition 속성을 사용하여 사용할 condition 을 지정합니다.
<cfset myVar=false>
<cfloop condition="myVar eq false">
<cfoutput>
myVar = <b>#myVar#</b> (still in loop)<br />
</cfoutput>
<cfif RandRange(1,10) eq 10>
<cfset myVar="true">
</cfif>
</cfloop>
<cfoutput>
myVar = <b>#myVar#</b> (loop has finished)
</cfoutput>
쿼리 루프
ColdFusion 질의의 결과를 반복 할 수 있습니다.
<cfquery name="getMovies" datasource="Entertainment">
select top 4 movieName
from Movies
</cfquery>
<cfloop query="getMovies">
#movieName#
</cfloop>
목록 루프
(선택적) delimiters 특성을 사용하여 목록에서 구분 기호로 사용되는 문자를 지정할 수 있습니다.
<cfloop list="ColdFusion,HTML;XML" index="ListItem" delimiters=",;">
<cfoutput>
#ListItem#<br />
</cfoutput>
</cfloop>
파일 루프
파일을 반복 할 수 있습니다.
<cfloop file="#myFile#" index="line">
<cfoutput>
#line#<br />
</cfoutput>
</cfloop>
COM 수집 / 구조 루프
구조 또는 COM 컬렉션을 반복 할 수 있습니다.
<cfset myBooks = StructNew()>
<cfset myVariable = StructInsert(myBooks,"ColdFusion","ColdFusion MX Bible")>
<cfset myVariable = StructInsert(myBooks,"HTML","HTML Visual QuickStart")>
<cfset myVariable = StructInsert(myBooks,"XML","Inside XML")>
<cfloop collection="#myBooks#" item="subject">
<cfoutput>
<b>#subject#:</b> #StructFind(myBooks,subject)#<br />
</cfoutput>
</cfloop>