Stasera mi sono trovato di fronte ad un problema per la visualizzazione di una query. Premessa: lavoravo su template terze persone, le tabelle così non sono colpa mia
Scherzi a parte, il problema era loopare i servizi relativi ad un hotel, generando una tabella fatta in questo modo:
| ICONA SERVIZIO1 | ICONA SERVIZIO2 | ICONA SERVIZIO3 |
| descrizione servizio1 | descrizione servizio2 | descrizione servizio3 |
| ICONA SERVIZIO4 | ICONA SERVIZIO5 | ICONA SERVIZIO6 |
| descrizione servizio4 | descrizione servizio5 | descrizione servizio6 |
Da tenere presente che i servizi erano chiaramente caricati da DB in numero non definito. Non potendo usare il normale <cfoutput query="qry_localeServizi"> in modo standard ho trovato questa simpatica (a me faceva ridere…) soluzione.
Ottengo il numero di righe per visualizzari i servizi, considerando riga due TR che contengono icona e servizio, e che per ogni riga ci sono 3 colonne TD. Con la funzione ROUND ottengo il numero intero arrotondato per eccesso.
<cfset righe = ceiling(qry_localeServizi.recordCount / 3)>
A questo punto applico un loop per ogni per ogni riga (3 locali):
<cfloop index="i" from="1" to="#righe#">
…
</cfloop>
Calcoliamo quindi per ogni riga (i) il loop della posizione dei record da visualizzare, che inseriremo nel loop delle righe, in modo da ricalcolarli ogni riga:
<cfset ini = (colonne*(i-1))+1>
<cfset fine = (colonne*(i-1))+colonne>
che diventa quindi
<cfloop index="i" from="1" to="#righe#">
<cfset ini = (colonne*(i-1))+1>
<cfset fine = (colonne*(i-1))+colonne>
</cfloop>
Quindi al suo interno posso inserire 2 loop alle query (uno per icona e uno per descrizione) e creare le varie celle della tabella:
<tr>
<cfloop query="qry_localeServizi" startrow="#ini#" endrow="#fine#">
<td width="33%"><div align="center"><img src="_file/servizi/img/#immagine#"></div></td>
</cfloop>
</tr>
<tr>
<cfloop query="qry_localeServizi" startrow="#ini#" endrow="#fine#">
<td class="testo"><div align="center">#servizio#</div></td>
</cfloop>
</tr>
Prodotto finale:
<cfset colonne = 3>
<table width="100%" border="1" cellpadding="5" cellspacing="5" bordercolor="##CCCCCC">
<tr>
<td colspan="#colonne#" class="titoletto">Servizi</td>
</tr>
<cfset righe = ceiling(qry_localeServizi.recordCount / colonne)>
<cfloop index="i" from="1" to="#righe#">
<cfset ini = (colonne*(i-1))+1>
<cfset fine = (colonne*(i-1))+colonne>
<cfset colWidth = round(100 / colonne)>
<tr>
<cfloop query="qry_localeServizi" startrow="#ini#" endrow="#fine#">
<td width="#colWidth#%"><div align="center"><img src="_file/servizi/img/#immagine#"></div></td>
</cfloop>
</tr>
<tr>
<cfloop query="qry_localeServizi" startrow="#ini#" endrow="#fine#">
<td class="testo"><div align="center">#servizio#</div></td>
</cfloop>
</tr>
</cfloop>
</table>
Semplice no? Oltre tutto pare non infastidire nemmeno il rendering del sig. DW.
Notte cari colleghi!
Se trovi questo articolo su un blog diverso da “blog.merlinox.com” si tratta probabilmente di una copia non autorizzata. L’indirizzo originale di questo articolo è: Generazione tabelle con n colonne da query scritto da Merlinox.

oddio
io preferisco un looppone sulla query e quando trovo un numero divisibile per 3 piazzo al fine riga.
ad ogni modo va bene anche questo
@k76: Scusa ma guarda che il problema non è andare a capo (meglio con DIV e BR) ma è loopare due volte la query per ogni riga (una per le colonne icone e una per le colonne descrizione).
swooops
heheh
che scivolone
sno in pappa in sti giorni, avrò il ciclo!