coldfusion
CFLOOP How-To
Sök…
Anmärkningar
Stort tack till
- Pete Freitag för sitt CFScript-fuskblad
- Adam Cameron för CF 11: CFLOOP i CFScript är väldigt trasig (och det är fortfarande i CF 2016).
Looperar genom en samling med CFML-taggar.
<!--- 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>
Looping genom en samling med 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>
Index
parametrar
| Attribut | Nödvändig | Typ | Standard | Beskrivning |
|---|---|---|---|---|
| index | Sann | sträng | Variabelnamn för slingans index. Standardvärde för variables . | |
| från | Sann | numerisk | Startvärde för indexet. | |
| till | Sann | numerisk | Avslutande värde för indexet. | |
| steg | falsk | numerisk | 1 | Värde för att öka eller minska indexet per iteration. |
Grundläggande indexslinga
Slutvärdet på
xär 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
Öka steget till 2
Slutvärdet på
xär 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
Dekrement steg för 1
Det slutliga värdet på
xär 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 i en funktion
Se till att
varellerlocalomfattar indexet i en funktion.Foo()returnerar 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 genom ström
Cfscript-funktionen
cfloophar inget stöd förindexsom en fristående räknemekanism.
Tillstånd
Tag syntax
parametrar
| Attribut | Nödvändig | Typ | Standard | Beskrivning |
|---|---|---|---|---|
| tillstånd | Sann | sträng | Tillstånd som hanterar slingan. Kan inte innehålla matematiska symboler som < , > eller = . Måste använda ColdFusion-textimplementeringar som less than , lt , greater than , gt , equals eller eq . |
Slutvärdet på x är 5.
<cfset x = 0 />
<cfoutput>
<cfloop condition="x LT 5">
<cfset x++ />
<li>#x#</li>
</cfloop>
</cfoutput>
Genererad HTML
Detta kommer också att ha en rader mellan varje rad i HTML.
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
CFSCRIPT
Före ColdFusion 8
<cfscript>
x = 0;
while (x LT 5) {
x = x + 1;
writeOutput('<li>' & x & '</li>');
}
</cfscript>
ColdFusion 8 genom ström
<cfscript>
x = 0;
while (x LT 5) {
x = x++;
writeOutput('<li>' & x & '</li>');
}
</cfscript>
ColdFusion 11 genom ström
Cfscript-funktionen
cfloophar inget stöd förcondition.
Genererad HTML
Lägg märke till att cfscript-utdata finns på en rad.
<li>one</li><li>two</li><li>three</li><li>four</li>
Datum eller tidsintervall
Exempel för datum eller tidsintervall.
Fråga
Tänk på tabellen dbo.state_zip , som innehåller kolumnerna city , statecode och zipcode och har över 80 000 poster.
parametrar
| Attribut | Nödvändig | Typ | Standard | Beskrivning |
|---|---|---|---|---|
| fråga | Sann | sträng | Variabelns namn på ett frågaobjekt. | |
| StartRow | falsk | numerisk | Startradens index för frågaobjektet. | |
| EndRow | falsk | numerisk | Slutradens index för frågaobjektet. | |
| grupp | falsk | sträng | Namnet på frågekolumnen som du vill gruppera poster på. |
Exempelfråga
<cfquery name="geo" datasource="reotrans-dev">
SELECT city, stateCode, zipCode
FROM dbo.state_zip
</cfquery>
Tag syntax
Använda frågeobjektets geo som källa för cfloop . Eftersom tabellen dbo.state_zip har så många poster kommer HTML-genererade att ta ganska lång tid. Detta exempel visar bara de första 20 posternas HTML-värde.
<cfoutput>
<ul>
<cfloop query="geo">
<!--- Scope the column names with the query name. --->
<li>#geo.city# | #geo.stateCode# | #geo.zipCode#</li>
</cfloop>
</ul>
</cfoutput>
Genererad 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>
Begränsa utgången till specifika rader
För att begränsa frågeställningens utgång till ett visst antal rader anger du startrow och endrow .
<cfloop query="geo" startrow="100" endrow="150">
<li>#geo.city# | #geo.stateCode# | #geo.zipCode#</li>
</cfloop>
Gruppera output
I exempeldata listade samma tillstånd flera gånger i förhållande till de flera städerna som är associerade till varje stat. Du kan också se samma stad som listas flera gånger i förhållande till flera postnummer som är kopplade till varje stad.
Låt oss gruppera utgången efter tillstånd först. Lägg märke till den andra förekomsten av cfloop lindad runt innehållet som kommer att matas ut under det stateCode innehållet.
<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>
Genererade HTML (extrakt) från en grupperad cfloop tagg.
<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>
Slutligen, låt oss gruppera utgången efter stateCode , sedan efter city för att se alla zipCode poster per stad. Lägg märke till att den andra cfloop nu är grupperad efter city och en tredje cfloop finns för att mata ut zipCode data.
<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>
Genererade HTML (extrakt) från två grupperade cfloop taggar.
<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) men nuvarande
<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 men nuvarande
<cfscript>
for (x = 1; x <= geo.recordcount; x++) {
writeOutput( '<li>' & geo.city[x] & ' | ' &
geo.stateCode[x] & ' | ' & geo.zipCode[x] & '</li>');
}
</cfscript>
ColdFusion 10 men nuvarande
Med
FOR INsyntaxen ärxett frågeställningsobjekt, inte radindex.
<cfscript>
for (x in geo) {
writeOutput( '<li>' & x.city & ' | ' &
x.stateCode & ' | ' & x.zipCode & '</li>');
}
</cfscript>
ColdFusion 11 men nuvarande
ColdFusion 11 gör att de flesta taggar kan skrivas som cfscript.
<cfscript>
cfloop(query: geo, startrow: 1, endrow: 2) {
writeOutput( '<li>' & geo.city & ' | ' &
geo.stateCode & ' | ' & geo.zipCode & '</li>');
}
</cfscript>
Med 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>
Lista
Tänk på denna lista:
<cfset foo = "one,two,three,four" />
Tag syntax
parametrar
| Attribut | Nödvändig | Standard | Beskrivning |
|---|---|---|---|
| lista | Sann | Ett listobjekt. Variabeln måste utvärderas (lindad med ##) | |
| index | Sann | Det aktuella elementet i listan. |
<cfoutput>
<cfloop list="#foo#" index="x">
<li>#x#</li>
</cfloop>
</cfoutput>
Genererad HTML
Detta kommer också att ha en rader mellan varje rad i HTML.
<li>one</li>
<li>two</li>
<li>three</li>
<li>four</li>
CFSCRIPT
Före ColdFusion 8
<cfscript>
for (x = 1; x LTE listLen(foo); x = x + 1) {
writeOutput("<li>" & listGetAt(foo, x) & "</li>");
}
</cfscript>
ColdFusion 8 genom ström
<cfscript>
for (x = 1; x <= listLen(foo); x++) {
writeOutput("<li>" & listGetAt(foo, x) & "</li>");
}
</cfscript>
ColdFusion 9 till och med ström
<cfscript>
for (x in foo) {
writeOutput("<li>" & x & "</li>");
}
</cfscript>
ColdFusion 11 genom ström
Cfscript-funktionen
cfloophar inget stöd förlist.
Genererad HTML
Lägg märke till att cfscript-utdata finns på en rad.
<li>one</li><li>two</li><li>three</li><li>four</li>
Array
Förmågan att direkt använda en
arrayobjekt medcfloopsattes i Coldfusion 8.
Tänk på denna matris;
<cfset aFoo = [
"one"
, "two"
, "three"
, "four"
] />
Tag syntax
ColdFusion 8 genom ström
Använda attribut index av sig själv.
parametrar
| Attribut | Nödvändig | Standard | Beskrivning |
|---|---|---|---|
| array | Sann | Ett arrayobjekt. Variabeln måste utvärderas (lindad med ##) | |
| index | Sann | Det aktuella elementet i matrisen. |
<cfoutput>
<cfloop array="#aFoo#" index="x">
<li>#x#</li>
</cfloop>
</cfoutput>
Genererad HTML
Detta kommer också att ha en rader mellan varje rad i HTML.
<li>one</li>
<li>two</li>
<li>three</li>
<li>four</li>
ColdFusion 2016 genom nuvarande
itemändrar beteendet hoscfloopper Coldfusion 2016.
Använda attribut item i stället för eller utöver index .
parametrar
| Attribut | Nödvändig | Standard | Beskrivning |
|---|---|---|---|
| array | Sann | Ett arrayobjekt. Variabeln måste utvärderas (lindad med ##) | |
| Artikel | Sann | Det aktuella elementet i matrisen. | |
| index | falsk | Det aktuella indexet för matrisen. |
<cfoutput>
<cfloop array="#aFoo#" item="x" index="y">
<li>#x# | #y#</li>
</cfloop>
</cfoutput>
Genererad HTML
Detta kommer också att ha en rader mellan varje rad i HTML.
<li>one | 1</li>
<li>two | 2</li>
<li>three | 3</li>
<li>four | 4</li>
CFSCRIPT
Före ColdFusion 8
<cfscript>
for (i = 1; x LTE arrayLen(aFoo); i = i + 1) {
writeOutput("<li>" & aFoo[i] & "</li>");
}
</cfscript>
ColdFusion 8 genom ström
<cfscript>
for (i = 1; i <= arrayLen(aFoo); i = i++) {
writeOutput("<li>" & aFoo[i] & "</li>");
}
</cfscript>
ColdFusion 9 till och med ström
Med
FOR INsyntaxen är x det aktuella arrayelementet, inte arrayindex.
<cfscript>
for (x in aFoo) {
writeOutput("<li>" & x & "</li>");
}
</cfscript>
ColdFusion 11 genom ström
Cfscript-funktionen
cfloophar inget stöd förarray.
Genererad HTML
Lägg märke till att cfscript utdata finns på en rad.
<li>one</li><li>two</li><li>three</li><li>four</li>
Fil
<cfloop list="#myFile#" index="FileItem" delimiters="#chr(10)##chr(13)#">
<cfoutput>
#FileItem#<br />
</cfoutput>
</cfloop>
Strukturera
Tänk på denna struktur:
<cfset stFoo = {
a = "one"
, b = "two"
, c = "three"
, d = "foue"
} />
Tag syntax
parametrar
Lägg märke till användningen av attributet
itemistället förindex.
| Attribut | Nödvändig | Typ | Standard | Beskrivning |
|---|---|---|---|---|
| samling | Sann | strukturera | Ett struct . Variabeln måste utvärderas (lindad med ##). | |
| Artikel | Sann | sträng | Den nuvarande strukturen key , |
Använda strukturfunktioner
<cfoutput>
<cfloop collection="#stFoo#" item="x">
<li>#structFind(stFoo, x)#</li>
</cfloop>
</cfoutput>
Implicit Structure Syntax
<cfoutput>
<cfloop collection="#stFoo#" item="x">
<li>#stFoo[x]#</li>
</cfloop>
</cfoutput>
Genererad HTML
Detta kommer också att ha en rader mellan varje rad i HTML.
<li>one</li>
<li>two</li>
<li>three</li>
<li>four</li>
CFSCRIPT
Med
FOR INsyntaxen ärxenkeyför strukturobjektet.
Skriv ut strukturens nycklar
<cfscript>
for (x in stFoo) {
writeOutput("<li>" & x & "</li>");
}
</cfscript>
Genererad HTML
<li>A</li><li>B</li><li>C</li><li>D</li>
Skriv ut värdet på strukturens nycklar
Använda strukturfunktioner
<cfscript>
for (x in stFoo) {
writeOutput("<li>" & structFind(stFoo, x) & "</li>");
}
</cfscript>
Implicit Structure Syntax
<cfscript>
for (x in stFoo) {
writeOutput("<li>" & stFoo[x] & "</li>");
}
</cfscript>
ColdFusion 11 genom ström
Cfscript-funktionen
cfloophar inget stöd förcollection.
Genererad HTML
Lägg märke till att cfscript-utdata finns på en rad.
<li>one</li><li>two</li><li>three</li><li>four</li>
Indexslinga
Använd from och to attribut för att ange hur många iterationer som ska uppstå. Den (frivilligt) step attribut kan du avgöra hur stora steg kommer att bli.
<cfloop from="1" to="10" index="i" step="2">
<cfoutput>
#i#<br />
</cfoutput>
</cfloop>
Villkorlig slinga
Du använder condition att ange villkoret som ska användas.
<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>
Frågeslinga
Du kan slinga över resultaten från en ColdFusion-fråga.
<cfquery name="getMovies" datasource="Entertainment">
select top 4 movieName
from Movies
</cfquery>
<cfloop query="getMovies">
#movieName#
</cfloop>
Lista loop
Du kan använda attributet (valfritt) delimiters att ange vilka tecken som ska användas som separatorer i listan.
<cfloop list="ColdFusion,HTML;XML" index="ListItem" delimiters=",;">
<cfoutput>
#ListItem#<br />
</cfoutput>
</cfloop>
File Loop
Du kan slinga över en fil.
<cfloop file="#myFile#" index="line">
<cfoutput>
#line#<br />
</cfoutput>
</cfloop>
COM-samling / struktureringsslingor
Du kan slinga över en struktur eller en COM-samling.
<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>