Buscar..


Observaciones

Muchas gracias a

Recorrido a través de una colección utilizando etiquetas 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>

Recorrido a través de una colección usando 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>

Índice

Parámetros

Atributo Necesario Tipo Defecto Descripción
índice cierto cuerda Nombre de variable para el índice del bucle. Por defecto al ámbito de las variables .
desde cierto numérico Valor inicial para el índice.
a cierto numérico Valor final para el índice.
paso falso numérico 1 Valor por el cual aumentar o disminuir el índice por iteración.

Bucle de índice básico

El valor final de x es 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

Incrementa el paso a 2.

El valor final de x es 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

Decremento paso a paso por 1

El valor final de x es 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 en una función

Asegúrese de que var o local alcance el índice dentro de una función. Foo() devuelve 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 a través de la corriente

La función cfloop no admite el index como un mecanismo de contador independiente.

Condición

Sintaxis de etiqueta

Parámetros

Atributo Necesario Tipo Defecto Descripción
condición cierto cuerda Condición que gestiona el bucle. No puede contener símbolos matemáticos como < , > o = . Debe usar las implementaciones de texto de ColdFusion como less than , lt , greater than , gt , equals o eq .

El valor final de x es 5.

<cfset x = 0 />
<cfoutput>
    <cfloop condition="x LT 5">
        <cfset x++ />
        <li>#x#</li>
    </cfloop>
</cfoutput>

HTML generado

Esto también tendrá un salto de línea entre cada línea de HTML.

<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>

CFScript

Anterior a ColdFusion 8

<cfscript>
x = 0;
while (x LT 5) {
    x = x + 1;
    writeOutput('<li>' & x & '</li>');
}
</cfscript>

ColdFusion 8 a través de la corriente

<cfscript>
x = 0;
while (x LT 5) {
    x = x++;
    writeOutput('<li>' & x & '</li>');
}
</cfscript>

ColdFusion 11 a través de la corriente

La función cfloop no tiene soporte para la condition .

HTML generado

Observe que la salida de cfscript está en una sola línea.

<li>one</li><li>two</li><li>three</li><li>four</li>

Rango de fecha u hora

Ejemplo para el rango de fecha u hora.

Consulta

Considere la mesa dbo.state_zip , que contiene las columnas city , statecode y zipcode y cuenta con más de 80.000 registros.

Parámetros

Atributo Necesario Tipo Defecto Descripción
consulta cierto cuerda El nombre de la variable de un objeto de consulta.
startrow falso numérico El índice de la fila de inicio del objeto de consulta.
endrow falso numérico El índice de la fila final del objeto de consulta.
grupo falso cuerda El nombre de la columna de consulta en la que se agrupan los registros.

Consulta de ejemplo

<cfquery name="geo" datasource="reotrans-dev">
    SELECT city, stateCode, zipCode
    FROM dbo.state_zip
</cfquery>

Sintaxis de etiqueta

Usando el objeto de consulta geo como fuente para cfloop . Dado que la tabla dbo.state_zip tiene tantos registros, el HTML generado llevará bastante tiempo. Este ejemplo muestra solo el valor HTML de los primeros 20 registros.

<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 generado

<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>

Limitar la salida a filas específicas

Para limitar el resultado de la consulta a un rango específico de filas, especifique startrow y endrow .

<cfloop query="geo" startrow="100" endrow="150">
    <li>#geo.city# | #geo.stateCode# | #geo.zipCode#</li>
</cfloop>

Salida de agrupación

En los datos de ejemplo, el mismo estado aparece varias veces en relación con las múltiples ciudades que están asociadas a cada estado. También puede ver la misma ciudad enumerada varias veces en relación con los múltiples códigos postales asociados a cada ciudad.

Vamos a agrupar la salida por estado primero. Observe la segunda instancia de cfloop envuelve alrededor del contenido que se emitirá bajo el contenido agrupado de 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 generado (extracto) de una etiqueta cfloop agrupada.

<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>

Finalmente, stateCode la salida por stateCode , luego por city para ver todas las entradas zipCode por ciudad. Observe que el segundo cfloop ahora está agrupado por city y existe un tercer cfloop para generar los datos del 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 generado (extracto) a partir de dos etiquetas cfloop agrupadas.

<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) aunque actual

<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 aunque actual

<cfscript>
    for (x = 1; x <= geo.recordcount; x++) {
        writeOutput( '<li>' & geo.city[x] & ' | ' & 
            geo.stateCode[x] & ' | ' & geo.zipCode[x] & '</li>');
    }
</cfscript>

ColdFusion 10 aunque actual

Con la sintaxis de FOR IN , x es un objeto de fila de consulta, no el índice de fila.

<cfscript>
    for (x in geo) {
        writeOutput( '<li>' & x.city & ' | ' & 
            x.stateCode & ' | ' & x.zipCode & '</li>');
    }
</cfscript>

ColdFusion 11 aunque actual

ColdFusion 11 permite que la mayoría de las etiquetas se escriban como cfscript.

<cfscript>
    cfloop(query: geo, startrow: 1, endrow: 2) {
        writeOutput( '<li>' & geo.city & ' | ' & 
            geo.stateCode & ' | ' & geo.zipCode & '</li>');
    }
</cfscript>

Con 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

Considera esta lista:

<cfset foo = "one,two,three,four" />

Sintaxis de etiqueta

Parámetros

Atributo Necesario Defecto Descripción
lista cierto Un objeto de lista. La variable debe ser evaluada (envuelta con ##)
índice cierto El elemento actual de la lista.
<cfoutput>
    <cfloop list="#foo#" index="x">
        <li>#x#</li>
    </cfloop>
</cfoutput>

HTML generado

Esto también tendrá un salto de línea entre cada línea de HTML.

<li>one</li>
<li>two</li>
<li>three</li>
<li>four</li>

CFScript

Anterior a ColdFusion 8

<cfscript>
    for (x = 1; x LTE listLen(foo); x = x + 1) {
        writeOutput("<li>" & listGetAt(foo, x) & "</li>");
    }
</cfscript>

ColdFusion 8 a través de la corriente

<cfscript>
    for (x = 1; x <= listLen(foo); x++) {
        writeOutput("<li>" & listGetAt(foo, x) & "</li>");
    }
</cfscript>

ColdFusion 9 a través de la corriente

<cfscript>
    for (x in foo) {
        writeOutput("<li>" & x & "</li>");
    }
</cfscript>

ColdFusion 11 a través de la corriente

La función cfloop no tiene soporte para la list .

HTML generado

Observe que la salida de cfscript está en una sola línea.

<li>one</li><li>two</li><li>three</li><li>four</li>

Formación

La capacidad de usar directamente un objeto de array con cfloop se agregó en ColdFusion 8.

Considera esta matriz;

<cfset aFoo = [
    "one"
    , "two"
    , "three"
    , "four"
] />

Sintaxis de etiqueta

ColdFusion 8 a través de la corriente

Usando el index atributos por sí mismo.

Parámetros

Atributo Necesario Defecto Descripción
formación cierto Un objeto de matriz. La variable debe ser evaluada (envuelta con ##)
índice cierto El elemento actual de la matriz.
<cfoutput>
    <cfloop array="#aFoo#" index="x">
        <li>#x#</li>
    </cfloop>
</cfoutput>

HTML generado

Esto también tendrá un salto de línea entre cada línea de HTML.

<li>one</li>
<li>two</li>
<li>three</li>
<li>four</li>

ColdFusion 2016 a través de la corriente.

El item atributo cambia el comportamiento de cfloop partir de Coldfusion 2016.

Usar el item atributo en lugar de o además del index .

Parámetros

Atributo Necesario Defecto Descripción
formación cierto Un objeto de matriz. La variable debe ser evaluada (envuelta con ##)
ít cierto El elemento actual de la matriz.
índice falso El índice actual de la matriz.
<cfoutput>
    <cfloop array="#aFoo#" item="x" index="y">
        <li>#x# | #y#</li>
    </cfloop>
</cfoutput>

HTML generado

Esto también tendrá un salto de línea entre cada línea de HTML.

<li>one | 1</li>
<li>two | 2</li>
<li>three | 3</li>
<li>four | 4</li>

CFScript

Anterior a ColdFusion 8

<cfscript>
for (i = 1; x LTE arrayLen(aFoo); i = i + 1) {
    writeOutput("<li>" & aFoo[i] & "</li>");
}
</cfscript>

ColdFusion 8 a través de la corriente

<cfscript>
for (i = 1; i <= arrayLen(aFoo); i = i++) {
    writeOutput("<li>" & aFoo[i] & "</li>");
}
</cfscript>

ColdFusion 9 a través de la corriente

Con la sintaxis de FOR IN , x es el elemento de matriz actual, no el índice de matriz.

<cfscript>
for (x in aFoo) {
    writeOutput("<li>" & x & "</li>");
}
</cfscript>

ColdFusion 11 a través de la corriente

La función cfloop no tiene soporte para la array .

HTML generado

Observe que la salida de cfscript está en una sola línea.

<li>one</li><li>two</li><li>three</li><li>four</li>

Expediente

<cfloop list="#myFile#" index="FileItem" delimiters="#chr(10)##chr(13)#">
  <cfoutput>
   #FileItem#<br />
 </cfoutput>
</cfloop>

Estructura

Considera esta estructura:

<cfset stFoo = {
    a = "one"
    , b = "two"
    , c = "three"
    , d = "foue"
} />

Sintaxis de etiqueta

Parámetros

Observe el uso del item atributo en lugar del index .

Atributo Necesario Tipo Defecto Descripción
colección cierto estructura Un objeto struct . La variable debe ser evaluada (envuelta con ##).
ít cierto cuerda La key estructura actual,

Usando funciones de estructura

<cfoutput>
    <cfloop collection="#stFoo#" item="x">
        <li>#structFind(stFoo, x)#</li>
    </cfloop>
</cfoutput>

Sintaxis de estructura implícita

<cfoutput>
    <cfloop collection="#stFoo#" item="x">
        <li>#stFoo[x]#</li>
    </cfloop>
</cfoutput>

HTML generado

Esto también tendrá un salto de línea entre cada línea de HTML.

<li>one</li>
<li>two</li>
<li>three</li>
<li>four</li>

CFScript

Con la sintaxis de FOR IN , x es una key del objeto de estructura.

Salida de las claves de la estructura.

<cfscript>
    for (x in stFoo) {
        writeOutput("<li>" & x & "</li>");
    }
</cfscript>

HTML generado

<li>A</li><li>B</li><li>C</li><li>D</li>

Salida el valor de las claves de la estructura.

Usando funciones de estructura

<cfscript>
    for (x in stFoo) {
        writeOutput("<li>" & structFind(stFoo, x) & "</li>");
    }
</cfscript>

Sintaxis de estructura implícita

<cfscript>
    for (x in stFoo) {
        writeOutput("<li>" & stFoo[x] & "</li>");
    }
</cfscript>

ColdFusion 11 a través de la corriente

La función cfloop no tiene soporte para la collection .

HTML generado

Observe que la salida de cfscript está en una sola línea.

<li>one</li><li>two</li><li>three</li><li>four</li>

Index Loop

Use los atributos from y to para especificar cuántas iteraciones deberían ocurrir. El atributo de step (opcional) le permite determinar qué tan grandes serán los incrementos.

<cfloop from="1" to="10" index="i" step="2">
    <cfoutput>
        #i#<br />
    </cfoutput>
</cfloop>

Bucle condicional

Utiliza el atributo de condition para especificar la condición a usar.

<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 Loop

Puede recorrer los resultados de una consulta de ColdFusion.

<cfquery name="getMovies" datasource="Entertainment">
    select top 4 movieName
    from Movies
</cfquery>
<cfloop query="getMovies">
    #movieName#
</cfloop>

Listar bucle

Puede usar el atributo delimiters (opcional) para especificar qué caracteres se usan como separadores en la lista.

<cfloop list="ColdFusion,HTML;XML" index="ListItem" delimiters=",;">
    <cfoutput>
        #ListItem#<br />
    </cfoutput>
</cfloop>

Archivo de bucle

Puede pasar sobre un archivo.

<cfloop file="#myFile#" index="line">
    <cfoutput>
        #line#<br />
    </cfoutput>
</cfloop>

Colección COM / Estructura Loops

Puedes pasar sobre una estructura o colección 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>


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow