coldfusion
CFLOOP Comment faire
Recherche…
Remarques
Grand merci à
- Pete Freitag pour son aide-mémoire CFScript
- Adam Cameron pour CF 11: CFLOOP en CFScript est très cassé (et il l'est toujours dans CF 2016).
Faire le tour d'une collection à l'aide de balises 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>
Faire le tour d'une collection en utilisant 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>
Indice
Paramètres
| Attribut | Champs obligatoires | Type | Défaut | La description |
|---|---|---|---|---|
| indice | vrai | chaîne | Nom de la variable pour l'index de la boucle. Par défaut à la portée des variables . | |
| de | vrai | numérique | Valeur de départ pour l'index. | |
| à | vrai | numérique | Valeur de fin pour l'index. | |
| étape | faux | numérique | 1 | Valeur par laquelle augmenter ou diminuer l'index par itération. |
Boucle d'indexation de base
La valeur finale de
xest 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
Augmenter le pas à 2
La valeur finale de
xest 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
Décrémenter le pas de 1
La valeur finale de
xest 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 dans une fonction
Veillez à
varou àlocalportéelocall'index dans une fonction.Foo()renvoie 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 à travers le courant
La fonction
cfloopne prend pas en charge l'indextant que mécanisme de compteur autonome.
Condition
La syntaxe des balises
Paramètres
| Attribut | Champs obligatoires | Type | Défaut | La description |
|---|---|---|---|---|
| condition | vrai | chaîne | Condition qui gère la boucle. Ne peut pas contenir de symboles mathématiques tels que < , > ou = . Doit utiliser les implémentations de texte ColdFusion comme less than , lt , greater than , gt , equals ou eq . |
La valeur finale de x est 5.
<cfset x = 0 />
<cfoutput>
<cfloop condition="x LT 5">
<cfset x++ />
<li>#x#</li>
</cfloop>
</cfoutput>
HTML généré
Cela aura également un saut de ligne entre chaque ligne de HTML.
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
CFScript
Précédent à ColdFusion 8
<cfscript>
x = 0;
while (x LT 5) {
x = x + 1;
writeOutput('<li>' & x & '</li>');
}
</cfscript>
ColdFusion 8 à travers le courant
<cfscript>
x = 0;
while (x LT 5) {
x = x++;
writeOutput('<li>' & x & '</li>');
}
</cfscript>
ColdFusion 11 à travers le courant
La fonction
cfloopne prend pas en charge lacondition.
HTML généré
Notez que la sortie de cfscript est sur une seule ligne.
<li>one</li><li>two</li><li>three</li><li>four</li>
Date ou plage de temps
Exemple de plage de dates ou d'heures.
Question
Considérez la table dbo.state_zip , qui contient les colonnes city , statecode et zipcode et compte plus de 80 000 dossiers.
Paramètres
| Attribut | Champs obligatoires | Type | Défaut | La description |
|---|---|---|---|---|
| question | vrai | chaîne | Le nom de la variable d'un objet de requête. | |
| Startrow | faux | numérique | Index de la ligne de départ de l'objet de requête. | |
| endrow | faux | numérique | L'index de ligne de fin de l'objet de requête. | |
| groupe | faux | chaîne | Nom de la colonne de requête sur lequel regrouper les enregistrements. |
Exemple de requête
<cfquery name="geo" datasource="reotrans-dev">
SELECT city, stateCode, zipCode
FROM dbo.state_zip
</cfquery>
La syntaxe des balises
Utiliser l'objet de requête geo comme source pour cfloop . Comme la table dbo.state_zip contient un si grand nombre d'enregistrements, le code HTML généré prendra un certain temps. Cet exemple montre uniquement la valeur HTML des 20 premiers enregistrements.
<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 généré
<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>
Limiter la sortie à des lignes spécifiques
Pour limiter la sortie de la requête à une plage de lignes spécifique, spécifiez startrow et endrow .
<cfloop query="geo" startrow="100" endrow="150">
<li>#geo.city# | #geo.stateCode# | #geo.zipCode#</li>
</cfloop>
Regroupement des sorties
Dans les exemples de données, le même état est répertorié plusieurs fois par rapport aux multiples villes associées à chaque état. Vous pouvez également voir la même ville plusieurs fois par rapport aux multiples codes postaux associés à chaque ville.
Groupons d'abord la sortie par état. Notez la 2ème instance de cfloop entourant le contenu qui sera stateCode sous le contenu groupé stateCode .
<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>
HTML généré (extrait) à partir d'une balise cfloop groupée.
<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>
Enfin, stateCode le résultat par stateCode , puis par city afin de voir toutes les entrées zipCode par ville. Notez que le 2ème cfloop est maintenant groupé par city et qu'un 3ème cfloop existe pour générer les données 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>
HTML généré (extrait) à partir de deux balises cfloop groupées.
<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) en cours
<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 si actuel
<cfscript>
for (x = 1; x <= geo.recordcount; x++) {
writeOutput( '<li>' & geo.city[x] & ' | ' &
geo.stateCode[x] & ' | ' & geo.zipCode[x] & '</li>');
}
</cfscript>
ColdFusion 10 si actuel
Avec la syntaxe
FOR IN,xest un objet de ligne de requête, pas l'index de ligne.
<cfscript>
for (x in geo) {
writeOutput( '<li>' & x.city & ' | ' &
x.stateCode & ' | ' & x.zipCode & '</li>');
}
</cfscript>
ColdFusion 11 si actuel
ColdFusion 11 permet à la plupart des balises d'être écrites en tant que scriptcfscript.
<cfscript>
cfloop(query: geo, startrow: 1, endrow: 2) {
writeOutput( '<li>' & geo.city & ' | ' &
geo.stateCode & ' | ' & geo.zipCode & '</li>');
}
</cfscript>
Avec 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
Considérez cette liste:
<cfset foo = "one,two,three,four" />
La syntaxe des balises
Paramètres
| Attribut | Champs obligatoires | Défaut | La description |
|---|---|---|---|
| liste | vrai | Un objet liste. La variable doit être évaluée (enveloppée avec ##) | |
| indice | vrai | L'élément actuel de la liste. |
<cfoutput>
<cfloop list="#foo#" index="x">
<li>#x#</li>
</cfloop>
</cfoutput>
HTML généré
Cela aura également un saut de ligne entre chaque ligne de HTML.
<li>one</li>
<li>two</li>
<li>three</li>
<li>four</li>
CFScript
Précédent à ColdFusion 8
<cfscript>
for (x = 1; x LTE listLen(foo); x = x + 1) {
writeOutput("<li>" & listGetAt(foo, x) & "</li>");
}
</cfscript>
ColdFusion 8 à travers le courant
<cfscript>
for (x = 1; x <= listLen(foo); x++) {
writeOutput("<li>" & listGetAt(foo, x) & "</li>");
}
</cfscript>
ColdFusion 9 à travers le courant
<cfscript>
for (x in foo) {
writeOutput("<li>" & x & "</li>");
}
</cfscript>
ColdFusion 11 à travers le courant
La fonction
cfloopn'a aucun support pour lalist.
HTML généré
Notez que la sortie de cfscript est sur une seule ligne.
<li>one</li><li>two</li><li>three</li><li>four</li>
Tableau
La possibilité d'utiliser directement un objet
arrayaveccfloopété ajoutée dans ColdFusion 8.
Considérez ce tableau;
<cfset aFoo = [
"one"
, "two"
, "three"
, "four"
] />
La syntaxe des balises
ColdFusion 8 à travers le courant
Utiliser l' index attribut par lui-même.
Paramètres
| Attribut | Champs obligatoires | Défaut | La description |
|---|---|---|---|
| tableau | vrai | Un objet tableau. La variable doit être évaluée (enveloppée avec ##) | |
| indice | vrai | L'élément actuel du tableau. |
<cfoutput>
<cfloop array="#aFoo#" index="x">
<li>#x#</li>
</cfloop>
</cfoutput>
HTML généré
Cela aura également un saut de ligne entre chaque ligne de HTML.
<li>one</li>
<li>two</li>
<li>three</li>
<li>four</li>
ColdFusion 2016 à travers le courant
L'attribut
itemmodifie le comportement decfloopau Coldfusion 2016.
Utiliser l' item attribut au lieu de ou en plus de l' index .
Paramètres
| Attribut | Champs obligatoires | Défaut | La description |
|---|---|---|---|
| tableau | vrai | Un objet tableau. La variable doit être évaluée (enveloppée avec ##) | |
| article | vrai | L'élément actuel du tableau. | |
| indice | faux | L'index actuel du tableau. |
<cfoutput>
<cfloop array="#aFoo#" item="x" index="y">
<li>#x# | #y#</li>
</cfloop>
</cfoutput>
HTML généré
Cela aura également un saut de ligne entre chaque ligne de HTML.
<li>one | 1</li>
<li>two | 2</li>
<li>three | 3</li>
<li>four | 4</li>
CFScript
Précédent à ColdFusion 8
<cfscript>
for (i = 1; x LTE arrayLen(aFoo); i = i + 1) {
writeOutput("<li>" & aFoo[i] & "</li>");
}
</cfscript>
ColdFusion 8 à travers le courant
<cfscript>
for (i = 1; i <= arrayLen(aFoo); i = i++) {
writeOutput("<li>" & aFoo[i] & "</li>");
}
</cfscript>
ColdFusion 9 à travers le courant
Avec la syntaxe
FOR IN, x est l'élément du tableau en cours, pas l'index du tableau.
<cfscript>
for (x in aFoo) {
writeOutput("<li>" & x & "</li>");
}
</cfscript>
ColdFusion 11 à travers le courant
La fonction
cfloopne prend pas en charge learray.
HTML généré
Notez que la sortie de cfscript est sur une seule ligne.
<li>one</li><li>two</li><li>three</li><li>four</li>
Fichier
<cfloop list="#myFile#" index="FileItem" delimiters="#chr(10)##chr(13)#">
<cfoutput>
#FileItem#<br />
</cfoutput>
</cfloop>
Structure
Considérez cette structure:
<cfset stFoo = {
a = "one"
, b = "two"
, c = "three"
, d = "foue"
} />
La syntaxe des balises
Paramètres
Notez l'utilisation de l'
itemattribut au lieu de l'index.
| Attribut | Champs obligatoires | Type | Défaut | La description |
|---|---|---|---|---|
| collection | vrai | structure | Un objet struct . La variable doit être évaluée (enveloppée avec ##). | |
| article | vrai | chaîne | La key structure actuelle, |
Utilisation des fonctions de structure
<cfoutput>
<cfloop collection="#stFoo#" item="x">
<li>#structFind(stFoo, x)#</li>
</cfloop>
</cfoutput>
Syntaxe de structure implicite
<cfoutput>
<cfloop collection="#stFoo#" item="x">
<li>#stFoo[x]#</li>
</cfloop>
</cfoutput>
HTML généré
Cela aura également un saut de ligne entre chaque ligne de HTML.
<li>one</li>
<li>two</li>
<li>three</li>
<li>four</li>
CFScript
Avec la syntaxe
FOR IN,xest unekeyde l'objet structure.
Affiche les clés de la structure
<cfscript>
for (x in stFoo) {
writeOutput("<li>" & x & "</li>");
}
</cfscript>
HTML généré
<li>A</li><li>B</li><li>C</li><li>D</li>
Affiche la valeur des clés de la structure
Utilisation des fonctions de structure
<cfscript>
for (x in stFoo) {
writeOutput("<li>" & structFind(stFoo, x) & "</li>");
}
</cfscript>
Syntaxe de structure implicite
<cfscript>
for (x in stFoo) {
writeOutput("<li>" & stFoo[x] & "</li>");
}
</cfscript>
ColdFusion 11 à travers le courant
La fonction
cfloopne prend pas en charge lacollection.
HTML généré
Notez que la sortie de cfscript est sur une seule ligne.
<li>one</li><li>two</li><li>three</li><li>four</li>
Boucle d'index
Utilisez les attributs from et to pour spécifier le nombre d'itérations à effectuer. L'attribut d' step (facultatif) vous permet de déterminer la taille des incréments.
<cfloop from="1" to="10" index="i" step="2">
<cfoutput>
#i#<br />
</cfoutput>
</cfloop>
Boucle conditionnelle
Vous utilisez l'attribut condition pour spécifier la condition à utiliser.
<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>
Boucle de requête
Vous pouvez parcourir en boucle les résultats d'une requête ColdFusion.
<cfquery name="getMovies" datasource="Entertainment">
select top 4 movieName
from Movies
</cfquery>
<cfloop query="getMovies">
#movieName#
</cfloop>
Boucle de liste
Vous pouvez utiliser l'attribut delimiters (facultatif) pour spécifier les caractères utilisés comme séparateurs dans la liste.
<cfloop list="ColdFusion,HTML;XML" index="ListItem" delimiters=",;">
<cfoutput>
#ListItem#<br />
</cfoutput>
</cfloop>
Boucle de fichier
Vous pouvez parcourir en boucle un fichier.
<cfloop file="#myFile#" index="line">
<cfoutput>
#line#<br />
</cfoutput>
</cfloop>
Boucles COM Collection / Structure
Vous pouvez effectuer une boucle sur une collection Structure ou 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>