Generazione tabelle con n colonne da query

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!

Loading Facebook Comments ...

3 pensieri su “Generazione tabelle con n colonne da query

  1. k76

    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 🙂

    Rispondi
  2. Merlinox

    @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).

    Rispondi

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *