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!

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 .

3 Responses to Generazione tabelle con n colonne da query

  1. k76 dice:

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

  2. Merlinox dice:

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

  3. k76 dice:

    swooops
    che scivolone :) heheh
    sno in pappa in sti giorni, avrò il ciclo!

Lascia un Commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *

*

È possibile utilizzare questi tag ed attributi XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>