coldfusion
CFLOOP How-To
Zoeken…
Opmerkingen
Veel dank aan
- Pete Freitag voor zijn CFScript Cheat Sheet
- Adam Cameron voor CF 11: CFLOOP in CFScript is Very Broken (en het is nog steeds in CF 2016).
Een collectie doorlopen met behulp van CFML-tags.
<!--- 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>
Een collectie doorlopen met 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>
Inhoudsopgave
parameters
| Attribuut | Verplicht | Type | Standaard | Beschrijving |
|---|---|---|---|---|
| inhoudsopgave | waar | draad | Variabelenaam voor de index van de lus. Standaard ingesteld op variables . | |
| van | waar | numerieke | Startwaarde voor de index. | |
| naar | waar | numerieke | Eindwaarde voor de index. | |
| stap | vals | numerieke | 1 | Waarde waarmee de index per iteratie kan worden verhoogd of verlaagd. |
Basic index loop
Eindwaarde van
xis 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
Verhoog stap naar 2
Eindwaarde van
xis 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
Daling stap voor 1
Eindwaarde van
xis 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 in een functie
Zorg ervoor dat u de index binnen een functie
varoflocalscant.Foo()geeft 11 terug.
<!--- 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 door stroom
De cfscript-functie
cfloopgeen ondersteuning voorindexals een zelfstandigcfloop.
Staat
Tag-syntaxis
parameters
| Attribuut | Verplicht | Type | Standaard | Beschrijving |
|---|---|---|---|---|
| staat | waar | draad | Conditie die de lus beheert. Kan geen wiskundige symbolen bevatten zoals < , > of = . Moet ColdFusion-tekstimplementaties gebruiken zoals less than , lt , greater than , gt , equals of eq . |
Eindwaarde van x is 5.
<cfset x = 0 />
<cfoutput>
<cfloop condition="x LT 5">
<cfset x++ />
<li>#x#</li>
</cfloop>
</cfoutput>
Gegenereerde HTML
Dit heeft ook een regeleinde tussen elke HTML-regel.
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
CFScript
Voorafgaand aan ColdFusion 8
<cfscript>
x = 0;
while (x LT 5) {
x = x + 1;
writeOutput('<li>' & x & '</li>');
}
</cfscript>
ColdFusion 8 door stroom
<cfscript>
x = 0;
while (x LT 5) {
x = x++;
writeOutput('<li>' & x & '</li>');
}
</cfscript>
ColdFusion 11 door stroom
De cfscript-functie
cfloopgeen ondersteuning voor decondition.
Gegenereerde HTML
Merk op dat de cfscript-uitvoer zich allemaal op één regel bevindt.
<li>one</li><li>two</li><li>three</li><li>four</li>
Datum of tijdsbereik
Voorbeeld voor datum of tijdsbereik.
vraag
Beschouw de tabel dbo.state_zip , die de kolommen city , statecode en zipcode en meer dan 80.000 records heeft.
parameters
| Attribuut | Verplicht | Type | Standaard | Beschrijving |
|---|---|---|---|---|
| vraag | waar | draad | De variabelenaam van een queryobject. | |
| startrow | vals | numerieke | De startrijindex van het queryobject. | |
| eindRij | vals | numerieke | De eindrij-index van het queryobject. | |
| groep | vals | draad | De naam van de querykolom waarop records moeten worden gegroepeerd. |
Voorbeeldvraag
<cfquery name="geo" datasource="reotrans-dev">
SELECT city, stateCode, zipCode
FROM dbo.state_zip
</cfquery>
Tag-syntaxis
Het cfloop geo als bron voor cfloop . Omdat de tabel dbo.state_zip zoveel records heeft, zal de gegenereerde HTML behoorlijk wat tijd kosten. Dit voorbeeld toont alleen de waarde van de eerste 20 records 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>
Gegenereerde 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>
De uitvoer beperken tot specifieke rijen
Als u de uitvoer van de query wilt beperken tot een specifiek bereik van rijen, geeft u startrow en endrow .
<cfloop query="geo" startrow="100" endrow="150">
<li>#geo.city# | #geo.stateCode# | #geo.zipCode#</li>
</cfloop>
Groeperen van output
In de voorbeeldgegevens wordt dezelfde staat meerdere keren vermeld in relatie tot de meerdere steden die aan elke staat zijn gekoppeld. Je kunt ook dezelfde stad meerdere keren zien in relatie tot de meerdere postcode die aan elke stad zijn gekoppeld.
Laten we eerst de uitvoer groeperen op status. Let op het tweede exemplaar van cfloop rond de inhoud die wordt uitgevoerd onder de inhoud van de stateCode groep.
<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>
Gegenereerde HTML (extract) van één gegroepeerde cfloop tag.
<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>
Laten we tot slot de uitvoer stateCode op stateCode en vervolgens op city om alle zipCode vermeldingen per stad te bekijken. Merk op dat de 2e cfloop nu per city is gegroepeerd en er een 3e cfloop bestaat om de zipCode gegevens uit te voeren.
<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>
Gegenereerde HTML (extract) van twee gegroepeerde cfloop tags.
<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) hoewel actueel
<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 hoewel actueel
<cfscript>
for (x = 1; x <= geo.recordcount; x++) {
writeOutput( '<li>' & geo.city[x] & ' | ' &
geo.stateCode[x] & ' | ' & geo.zipCode[x] & '</li>');
}
</cfscript>
ColdFusion 10 hoewel actueel
Met de
FOR INsyntaxis isxeen queryrijobject, niet de rijindex.
<cfscript>
for (x in geo) {
writeOutput( '<li>' & x.city & ' | ' &
x.stateCode & ' | ' & x.zipCode & '</li>');
}
</cfscript>
ColdFusion 11 hoewel actueel
Met ColdFusion 11 kunnen de meeste tags worden geschreven als cfscript.
<cfscript>
cfloop(query: geo, startrow: 1, endrow: 2) {
writeOutput( '<li>' & geo.city & ' | ' &
geo.stateCode & ' | ' & geo.zipCode & '</li>');
}
</cfscript>
Met 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>
Lijst
Beschouw deze lijst:
<cfset foo = "one,two,three,four" />
Tag-syntaxis
parameters
| Attribuut | Verplicht | Standaard | Beschrijving |
|---|---|---|---|
| lijst | waar | Een lijstobject. De variabele moet worden geëvalueerd (omwikkeld met ##) | |
| inhoudsopgave | waar | Het huidige element van de lijst. |
<cfoutput>
<cfloop list="#foo#" index="x">
<li>#x#</li>
</cfloop>
</cfoutput>
Gegenereerde HTML
Dit heeft ook een regeleinde tussen elke HTML-regel.
<li>one</li>
<li>two</li>
<li>three</li>
<li>four</li>
CFScript
Voorafgaand aan ColdFusion 8
<cfscript>
for (x = 1; x LTE listLen(foo); x = x + 1) {
writeOutput("<li>" & listGetAt(foo, x) & "</li>");
}
</cfscript>
ColdFusion 8 door stroom
<cfscript>
for (x = 1; x <= listLen(foo); x++) {
writeOutput("<li>" & listGetAt(foo, x) & "</li>");
}
</cfscript>
ColdFusion 9 door stroom
<cfscript>
for (x in foo) {
writeOutput("<li>" & x & "</li>");
}
</cfscript>
ColdFusion 11 door stroom
De cfscript-functie
cfloopgeen ondersteuning voor delist.
Gegenereerde HTML
Merk op dat de cfscript-uitvoer zich allemaal op één regel bevindt.
<li>one</li><li>two</li><li>three</li><li>four</li>
reeks
De mogelijkheid om rechtstreeks een
arrayobject metcfloopis toegevoegd in ColdFusion 8.
Overweeg deze reeks;
<cfset aFoo = [
"one"
, "two"
, "three"
, "four"
] />
Tag-syntaxis
ColdFusion 8 door stroom
Met behulp van het attribuut index zelf.
parameters
| Attribuut | Verplicht | Standaard | Beschrijving |
|---|---|---|---|
| rangschikking | waar | Een matrixobject. De variabele moet worden geëvalueerd (omwikkeld met ##) | |
| inhoudsopgave | waar | Het huidige element van de array. |
<cfoutput>
<cfloop array="#aFoo#" index="x">
<li>#x#</li>
</cfloop>
</cfoutput>
Gegenereerde HTML
Dit heeft ook een regeleinde tussen elke HTML-regel.
<li>one</li>
<li>two</li>
<li>three</li>
<li>four</li>
ColdFusion 2016 via stroom
Het attribuut
itemverandert het gedrag vancfloopals van Coldfusion 2016.
Met behulp van het attribuut item in plaats van of in aanvulling op de index .
parameters
| Attribuut | Verplicht | Standaard | Beschrijving |
|---|---|---|---|
| rangschikking | waar | Een matrixobject. De variabele moet worden geëvalueerd (omwikkeld met ##) | |
| item | waar | Het huidige element van de array. | |
| inhoudsopgave | vals | De huidige index van de array. |
<cfoutput>
<cfloop array="#aFoo#" item="x" index="y">
<li>#x# | #y#</li>
</cfloop>
</cfoutput>
Gegenereerde HTML
Dit heeft ook een regeleinde tussen elke HTML-regel.
<li>one | 1</li>
<li>two | 2</li>
<li>three | 3</li>
<li>four | 4</li>
CFScript
Voorafgaand aan ColdFusion 8
<cfscript>
for (i = 1; x LTE arrayLen(aFoo); i = i + 1) {
writeOutput("<li>" & aFoo[i] & "</li>");
}
</cfscript>
ColdFusion 8 door stroom
<cfscript>
for (i = 1; i <= arrayLen(aFoo); i = i++) {
writeOutput("<li>" & aFoo[i] & "</li>");
}
</cfscript>
ColdFusion 9 door stroom
Met de
FOR INsyntaxis is x het huidige array-element, niet de array-index.
<cfscript>
for (x in aFoo) {
writeOutput("<li>" & x & "</li>");
}
</cfscript>
ColdFusion 11 door stroom
De cfscript-functie
cfloopgeen ondersteuning voorarray.
Gegenereerde HTML
Merk op dat de cfscript uitvoer zich allemaal op één regel bevindt.
<li>one</li><li>two</li><li>three</li><li>four</li>
het dossier
<cfloop list="#myFile#" index="FileItem" delimiters="#chr(10)##chr(13)#">
<cfoutput>
#FileItem#<br />
</cfoutput>
</cfloop>
Structuur
Beschouw deze structuur:
<cfset stFoo = {
a = "one"
, b = "two"
, c = "three"
, d = "foue"
} />
Tag-syntaxis
parameters
Let op het gebruik van het attribuut
itemin plaats vanindex.
| Attribuut | Verplicht | Type | Standaard | Beschrijving |
|---|---|---|---|---|
| verzameling | waar | structuur | Een struct object. De variabele moet worden geëvalueerd (omwikkeld met ##). | |
| item | waar | draad | De huidige structuur key , |
Structuurfuncties gebruiken
<cfoutput>
<cfloop collection="#stFoo#" item="x">
<li>#structFind(stFoo, x)#</li>
</cfloop>
</cfoutput>
Impliciete structuursyntaxis
<cfoutput>
<cfloop collection="#stFoo#" item="x">
<li>#stFoo[x]#</li>
</cfloop>
</cfoutput>
Gegenereerde HTML
Dit heeft ook een regeleinde tussen elke HTML-regel.
<li>one</li>
<li>two</li>
<li>three</li>
<li>four</li>
CFScript
Met de
FOR INsyntaxis isxeenkeyvan het structuurobject.
Voer de toetsen van de structuur uit
<cfscript>
for (x in stFoo) {
writeOutput("<li>" & x & "</li>");
}
</cfscript>
Gegenereerde HTML
<li>A</li><li>B</li><li>C</li><li>D</li>
Voer de waarde van de sleutels van de structuur uit
Structuurfuncties gebruiken
<cfscript>
for (x in stFoo) {
writeOutput("<li>" & structFind(stFoo, x) & "</li>");
}
</cfscript>
Impliciete structuursyntaxis
<cfscript>
for (x in stFoo) {
writeOutput("<li>" & stFoo[x] & "</li>");
}
</cfscript>
ColdFusion 11 door stroom
De cfscript-functie
cfloopgeen ondersteuning voor hetcollection.
Gegenereerde HTML
Merk op dat de cfscript-uitvoer zich allemaal op één regel bevindt.
<li>one</li><li>two</li><li>three</li><li>four</li>
Index lus
Gebruik de kenmerken from en to aan te geven hoeveel iteraties moeten voorkomen. De (optionele) step attribuut kunt u bepalen hoe groot de stappen zullen zijn.
<cfloop from="1" to="10" index="i" step="2">
<cfoutput>
#i#<br />
</cfoutput>
</cfloop>
Voorwaardelijke lus
U gebruikt het kenmerk condition om de te gebruiken voorwaarde op te geven.
<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>
Query-lus
U kunt de resultaten van een ColdFusion-query herhalen.
<cfquery name="getMovies" datasource="Entertainment">
select top 4 movieName
from Movies
</cfquery>
<cfloop query="getMovies">
#movieName#
</cfloop>
Lijst Loop
U kunt het kenmerk (optioneel) delimiters aan te geven welke tekens als scheidingstekens in de lijst worden gebruikt.
<cfloop list="ColdFusion,HTML;XML" index="ListItem" delimiters=",;">
<cfoutput>
#ListItem#<br />
</cfoutput>
</cfloop>
File Loop
U kunt een bestand herhalen.
<cfloop file="#myFile#" index="line">
<cfoutput>
#line#<br />
</cfoutput>
</cfloop>
COM-verzameling / structuurlussen
U kunt een structuur of een COM-verzameling herhalen.
<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>