coldfusion
CFLOOP-Anleitung
Suche…
Bemerkungen
Vielen Dank an
- Pete Freitag für sein CFScript Cheat Sheet
- Adam Cameron für CF 11: CFLOOP in CFScript ist Very Broken (und befindet sich noch in CF 2016).
Durchlaufen einer Sammlung mithilfe von 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>
Durchlaufen einer Sammlung mit 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
Parameter
| Attribut | Erforderlich | Art | Standard | Beschreibung |
|---|---|---|---|---|
| Index | wahr | Schnur | Variablenname für den Index der Schleife. Voreinstellung für den variables . | |
| von | wahr | numerisch | Startwert für den Index. | |
| zu | wahr | numerisch | Endwert für den Index. | |
| Schritt | falsch | numerisch | 1 | Wert, um den der Index pro Iteration erhöht oder verringert werden soll. |
Grundlegende Indexschleife
Der Endwert von
xist 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
Erhöhen Sie den Schritt auf 2
Der Endwert von
xist 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
Dekrementieren Sie Schritt um 1
Der Endwert von
xist 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 einer Funktion
Stellen Sie sicher, dass Sie den Index innerhalb einer Funktion
varoderlocalfestlegen.Foo()gibt 11 zurück.
<!--- 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 durch Strom
Die cfscript-Funktion
cfloopunterstütztindexals eigenständigencfloop.
Bedingung
Tag-Syntax
Parameter
| Attribut | Erforderlich | Art | Standard | Beschreibung |
|---|---|---|---|---|
| Bedingung | wahr | Schnur | Bedingung, die die Schleife verwaltet. Kann keine mathematischen Symbole wie < , > oder = . Muss Coldfusion Text Implementierungen wie verwenden less than , lt , greater than , gt , equals oder eq . |
Der Endwert von x ist 5.
<cfset x = 0 />
<cfoutput>
<cfloop condition="x LT 5">
<cfset x++ />
<li>#x#</li>
</cfloop>
</cfoutput>
Generiertes HTML
Dies hat auch einen Zeilenumbruch zwischen jeder HTML-Zeile.
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
CFScript
Zurück zu ColdFusion 8
<cfscript>
x = 0;
while (x LT 5) {
x = x + 1;
writeOutput('<li>' & x & '</li>');
}
</cfscript>
ColdFusion 8 durch Strom
<cfscript>
x = 0;
while (x LT 5) {
x = x++;
writeOutput('<li>' & x & '</li>');
}
</cfscript>
ColdFusion 11 durch Strom
Die cfscript-Funktion
cfloopunterstützt keinecondition.
Generiertes HTML
Beachten Sie, dass sich die Ausgabe von cfscript in einer Zeile befindet.
<li>one</li><li>two</li><li>three</li><li>four</li>
Datum oder Zeitbereich
Beispiel für Datum oder Zeitbereich.
Abfrage
Betrachten Sie die Tabelle dbo.state_zip , die die Spalten city , statecode und zipcode und über 80.000 Datensätze enthält.
Parameter
| Attribut | Erforderlich | Art | Standard | Beschreibung |
|---|---|---|---|---|
| Abfrage | wahr | Schnur | Der Variablenname eines Abfrageobjekts. | |
| startrow | falsch | numerisch | Der Anfangszeilenindex des Abfrageobjekts. | |
| endrow | falsch | numerisch | Der Endzeilenindex des Abfrageobjekts. | |
| Gruppe | falsch | Schnur | Der Name der Abfragespalte, nach der Datensätze gruppiert werden sollen. |
Beispielabfrage
<cfquery name="geo" datasource="reotrans-dev">
SELECT city, stateCode, zipCode
FROM dbo.state_zip
</cfquery>
Tag-Syntax
Verwenden des Abfrageobjekts geo als Quelle für cfloop . Da die Tabelle dbo.state_zip so viele Datensätze enthält, dbo.state_zip der erzeugte HTML- dbo.state_zip einige Zeit. In diesem Beispiel wird nur der HTML-Wert der ersten 20 Datensätze angezeigt.
<cfoutput>
<ul>
<cfloop query="geo">
<!--- Scope the column names with the query name. --->
<li>#geo.city# | #geo.stateCode# | #geo.zipCode#</li>
</cfloop>
</ul>
</cfoutput>
Generiertes 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>
Ausgabe auf bestimmte Zeilen beschränken
Um die Ausgabe der Abfrage auf einen bestimmten startrow endrow , geben Sie startrow und endrow .
<cfloop query="geo" startrow="100" endrow="150">
<li>#geo.city# | #geo.stateCode# | #geo.zipCode#</li>
</cfloop>
Ausgabe gruppieren
In den Beispieldaten wurde derselbe Bundesstaat mehrfach in Bezug auf die mehreren Städte aufgelistet, die jedem Bundesstaat zugeordnet sind. Sie können dieselbe Stadt auch mehrfach in Bezug auf die mit jeder Stadt verknüpften Postleitzahlen auflisten.
Lassen Sie uns zuerst die Ausgabe nach Zustand gruppieren. Beachten Sie die zweite Instanz von cfloop die um den Inhalt gewickelt ist, der unter stateCode gruppiertem Inhalt stateCode wird.
<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>
Generiertes HTML (Auszug) aus einem gruppierten 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>
Lassen Sie uns zum Schluss die Ausgabe nach stateCode und dann nach city stateCode , um alle zipCode Einträge pro Stadt zipCode . Beachten Sie, dass der 2. cfloop jetzt nach city gruppiert ist und ein 3. cfloop vorhanden ist, um die zipCode Daten 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>
Generiertes HTML (Auszug) aus zwei gruppierten 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) ist aktuell
<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 obwohl aktuell
<cfscript>
for (x = 1; x <= geo.recordcount; x++) {
writeOutput( '<li>' & geo.city[x] & ' | ' &
geo.stateCode[x] & ' | ' & geo.zipCode[x] & '</li>');
}
</cfscript>
ColdFusion 10 obwohl aktuell
Bei der
FOR INSyntax istxein Abfragezeilenobjekt, nicht der Zeilenindex.
<cfscript>
for (x in geo) {
writeOutput( '<li>' & x.city & ' | ' &
x.stateCode & ' | ' & x.zipCode & '</li>');
}
</cfscript>
ColdFusion 11 obwohl aktuell
In ColdFusion 11 können die meisten Tags als cfscript geschrieben werden.
<cfscript>
cfloop(query: geo, startrow: 1, endrow: 2) {
writeOutput( '<li>' & geo.city & ' | ' &
geo.stateCode & ' | ' & geo.zipCode & '</li>');
}
</cfscript>
Mit der 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>
Liste
Betrachten Sie diese Liste:
<cfset foo = "one,two,three,four" />
Tag-Syntax
Parameter
| Attribut | Erforderlich | Standard | Beschreibung |
|---|---|---|---|
| Liste | wahr | Ein Listenobjekt. Die Variable muss ausgewertet werden (mit ## umschlossen) | |
| Index | wahr | Das aktuelle Element der Liste. |
<cfoutput>
<cfloop list="#foo#" index="x">
<li>#x#</li>
</cfloop>
</cfoutput>
Generiertes HTML
Dies hat auch einen Zeilenumbruch zwischen jeder HTML-Zeile.
<li>one</li>
<li>two</li>
<li>three</li>
<li>four</li>
CFScript
Zurück zu ColdFusion 8
<cfscript>
for (x = 1; x LTE listLen(foo); x = x + 1) {
writeOutput("<li>" & listGetAt(foo, x) & "</li>");
}
</cfscript>
ColdFusion 8 durch Strom
<cfscript>
for (x = 1; x <= listLen(foo); x++) {
writeOutput("<li>" & listGetAt(foo, x) & "</li>");
}
</cfscript>
ColdFusion 9 durch Strom
<cfscript>
for (x in foo) {
writeOutput("<li>" & x & "</li>");
}
</cfscript>
ColdFusion 11 durch Strom
Die cfscript-Funktion
cfloopunterstützt keinelist.
Generiertes HTML
Beachten Sie, dass sich die Ausgabe von cfscript in einer Zeile befindet.
<li>one</li><li>two</li><li>three</li><li>four</li>
Array
Die Möglichkeit, ein
arrayObjekt direkt mitcfloopwurde in ColdFusion 8 hinzugefügt.
Betrachten Sie dieses Array.
<cfset aFoo = [
"one"
, "two"
, "three"
, "four"
] />
Tag-Syntax
ColdFusion 8 durch Strom
Unter Verwendung des Attributs index von selbst aus .
Parameter
| Attribut | Erforderlich | Standard | Beschreibung |
|---|---|---|---|
| Array | wahr | Ein Array-Objekt Die Variable muss ausgewertet werden (mit ## umschlossen) | |
| Index | wahr | Das aktuelle Element des Arrays. |
<cfoutput>
<cfloop array="#aFoo#" index="x">
<li>#x#</li>
</cfloop>
</cfoutput>
Generiertes HTML
Dies hat auch einen Zeilenumbruch zwischen jeder HTML-Zeile.
<li>one</li>
<li>two</li>
<li>three</li>
<li>four</li>
ColdFusion 2016 durch Strom
Das Attribut
itemändert das Verhalten voncfloopab Coldfusion 2016.
Mit dem Attribut item anstelle oder zusätzlich zu index .
Parameter
| Attribut | Erforderlich | Standard | Beschreibung |
|---|---|---|---|
| Array | wahr | Ein Array-Objekt Die Variable muss ausgewertet werden (mit ## umschlossen) | |
| Artikel | wahr | Das aktuelle Element des Arrays. | |
| Index | falsch | Der aktuelle Index des Arrays. |
<cfoutput>
<cfloop array="#aFoo#" item="x" index="y">
<li>#x# | #y#</li>
</cfloop>
</cfoutput>
Generiertes HTML
Dies hat auch einen Zeilenumbruch zwischen jeder HTML-Zeile.
<li>one | 1</li>
<li>two | 2</li>
<li>three | 3</li>
<li>four | 4</li>
CFScript
Zurück zu ColdFusion 8
<cfscript>
for (i = 1; x LTE arrayLen(aFoo); i = i + 1) {
writeOutput("<li>" & aFoo[i] & "</li>");
}
</cfscript>
ColdFusion 8 durch Strom
<cfscript>
for (i = 1; i <= arrayLen(aFoo); i = i++) {
writeOutput("<li>" & aFoo[i] & "</li>");
}
</cfscript>
ColdFusion 9 durch Strom
Bei der
FOR INSyntax ist x das aktuelle Array-Element, nicht der Array-Index.
<cfscript>
for (x in aFoo) {
writeOutput("<li>" & x & "</li>");
}
</cfscript>
ColdFusion 11 durch Strom
Die cfscript-Funktion
cfloopunterstütztarray.
Generiertes HTML
Beachten Sie, dass sich die Ausgabe von cfscript in einer Zeile befindet.
<li>one</li><li>two</li><li>three</li><li>four</li>
Datei
<cfloop list="#myFile#" index="FileItem" delimiters="#chr(10)##chr(13)#">
<cfoutput>
#FileItem#<br />
</cfoutput>
</cfloop>
Struktur
Betrachten Sie diese Struktur:
<cfset stFoo = {
a = "one"
, b = "two"
, c = "three"
, d = "foue"
} />
Tag-Syntax
Parameter
Beachten Sie die Verwendung des Attributs
itemanstelle vonindex.
| Attribut | Erforderlich | Art | Standard | Beschreibung |
|---|---|---|---|---|
| Sammlung | wahr | Struktur | Ein struct . Die Variable muss ausgewertet werden (mit ## umschlossen). | |
| Artikel | wahr | Schnur | Die derzeitige Struktur key , |
Strukturfunktionen verwenden
<cfoutput>
<cfloop collection="#stFoo#" item="x">
<li>#structFind(stFoo, x)#</li>
</cfloop>
</cfoutput>
Implizite Struktursyntax
<cfoutput>
<cfloop collection="#stFoo#" item="x">
<li>#stFoo[x]#</li>
</cfloop>
</cfoutput>
Generiertes HTML
Dies hat auch einen Zeilenumbruch zwischen jeder HTML-Zeile.
<li>one</li>
<li>two</li>
<li>three</li>
<li>four</li>
CFScript
Bei der
FOR INSyntax istxeinkeydes Strukturobjekts.
Geben Sie die Schlüssel der Struktur aus
<cfscript>
for (x in stFoo) {
writeOutput("<li>" & x & "</li>");
}
</cfscript>
Generiertes HTML
<li>A</li><li>B</li><li>C</li><li>D</li>
Geben Sie den Wert der Schlüssel der Struktur aus
Strukturfunktionen verwenden
<cfscript>
for (x in stFoo) {
writeOutput("<li>" & structFind(stFoo, x) & "</li>");
}
</cfscript>
Implizite Struktursyntax
<cfscript>
for (x in stFoo) {
writeOutput("<li>" & stFoo[x] & "</li>");
}
</cfscript>
ColdFusion 11 durch Strom
Die cfscript-Funktion
cfloopunterstützt keinecollection.
Generiertes HTML
Beachten Sie, dass sich die Ausgabe von cfscript in einer Zeile befindet.
<li>one</li><li>two</li><li>three</li><li>four</li>
Index-Schleife
Verwenden Sie die Attribute from und to , um anzugeben, wie viele Iterationen ausgeführt werden sollen. Mit dem (optionalen) step Attribut können Sie bestimmen, wie groß die Inkremente sein werden.
<cfloop from="1" to="10" index="i" step="2">
<cfoutput>
#i#<br />
</cfoutput>
</cfloop>
Bedingte Schleife
Sie verwenden das condition , um die zu verwendende condition anzugeben.
<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>
Abfrageschleife
Sie können die Ergebnisse einer ColdFusion-Abfrage durchlaufen.
<cfquery name="getMovies" datasource="Entertainment">
select top 4 movieName
from Movies
</cfquery>
<cfloop query="getMovies">
#movieName#
</cfloop>
Liste Schleife
Mit dem (optionalen) delimiters Attribut können Sie angeben, welche Zeichen als Trennzeichen in der Liste verwendet werden.
<cfloop list="ColdFusion,HTML;XML" index="ListItem" delimiters=",;">
<cfoutput>
#ListItem#<br />
</cfoutput>
</cfloop>
Datei-Schleife
Sie können eine Datei überlaufen.
<cfloop file="#myFile#" index="line">
<cfoutput>
#line#<br />
</cfoutput>
</cfloop>
COM Collection / Strukturschleifen
Sie können eine Struktur- oder COM-Sammlung durchlaufen.
<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>