I cicli
Quando si ha la necessità di eseguire ripetutamenteuna porzione di codice in base a determinate condizioni siutilizzano i cicli
In Coldfusion ci sono svariati tipi di cicli in funzione deltipo di condizione da gestire.
Ecco i più comuni:
Ciclo INDEX (FOR)
Il ciclo INDEX è utile per eseguire un blocco dicodice un numero specifico di volte.
Un esempio:
<cfloop index="i" from="1" to="10" step="1"><cfoutput>#i#</cfoutput> <br></cfloop>
In questo casoil codice interno al loop è ripetuto 10 volte per poiinterrompersi.
L'attributo STEP è facoltativo e di default havalore 1.
Ciclo CONDITIONAL (WHILE)
Il ciclo CONDITIONAL può essere utlizzato quando sivuole eseguire un blocco di codice fino a che una determinatacondizione è verificata:
< !--- imposto delle variabili---><cfset var="5"><cfset i="0"><cfloop condition="i LTE var"> <cfset i=i+1> <cfoutput>#i#</cfoutput> <br></cfloop>
Il ciclo viene eseguito fin tanto che la condizione èTRUE, quando "i LTE var" non è piùvera il ciclo termina
Ciclo QUERY
Il ciclo QUERY ripete il blocco di codice per ognirecord letto da una query:
<!--- effettuo la query ---><cfquery name="myquery" datasource="#dsn#"> select nome from tabella</cfquery><cfloop query="myquery" startrow="1" endrow="10"> <cfoutput>#myquery.nome#</cfoutput><br></cfloop>
Sia startrow che endrow sono opzionali.
Il risultato di un ciclo query è ottenibile ancheutilizzando <cfoutput>:
<cfoutputquery="myquery">#myquery.nome#</cfoutput>
La scelta dell'una o dell'altra soluzione dipendedalla struttura della pagina e dal rendimento, in genere ilcfloop è più performante e cfoutput nonè nidificabile al contrario di cfloop.
Ciclo LIST
Le liste in coldfusion rappresentano insiemi di datiseparati da uno o più delimitatori.
Utilizzando il ciclo LIST si può separare ognielemento.
<!--- creo una lista---><cfset mesi="gen,feb,mar,apr"><!--- eseguo il ciclo---><cfloop index="i" list="#mesi#" delimiters=" ,"> <cfoutput>#variables.i#</cfoutput><br></cfloop>
In questo modo otterremo un elenco che corrisponderàad ogni elemento della lista creata prima del ciclo, e lavariabile "i" assume, ad ogni passaggio, il nomedei mesi seguendo l'ordine della lista.
L'attributo delimiters è facoltativo, di defaultè uguale alla virgola, se la lista è delimitatada un'altro carattere deve essere specificato.
Cicli nidificati
Vediamo ora un'esempio di ciclo nidificato e il suooutput relativo:
<cfloop index="esterno" from="1" to="2"> <cfloop index="interno" from="7" to="9"> <cfoutput> Il ciclo esterno è= #variables.esterno# Il ciclo interno è= #variables.interno#<br> < /cfoutput> </cfloop></cfloop>
Il codice viene letto da quello esterno verso quellointerno, quindi al primo passaggio di quello esterno, quellointerno viene eseguito per 3 volte da 7 a 9, dopodichèuscendo ritorna a quello esterno per essere eseguito per laseconda e ultima volta, rientrando in quello interno.
Ma forse per capire meglio quello che succede puòessere utile vedere l'output:
Il ciclo esterno è= 1 Il ciclo interno è=7
Il ciclo esterno è= 1 Il ciclo interno è=8
Il ciclo esterno è= 1 Il ciclo interno è=9
Il ciclo esterno è= 2 Il ciclo interno è=7
Il ciclo esterno è= 2 Il ciclo interno è=8
Il ciclo esterno è= 2 Il ciclo interno è= 9