Editor  »  Guide  »  Guida Coldfusion Mx 

Interrogare una collection



Per poter cercare all'interno della collection abbiamo bisogno di un modulo, che possiamo riciclare dal file ricerca_semplice.cfm.

1.Salva il modulo in un nuovo file ricerca_avanzata.cfm:

<!--- ricerca_avanzata.cfm: piccolo motore di ricerca con verity --->

<p class="titolo">Ricerca avanzata</p>
<p>
     <form method="post">
     <table border="0" cellspacing="1" cellpadding="3">
          <tr>
               <td><p>Parola chiave:</p></td>
               <td><input type="text" name="parolaChiave"></td>
          </tr>
          <tr>
               <td>&nbsp;</td>
               <td><input type="submit" value="Cerca"></td>
          </tr>
     </table>
     </form>
</p>

Come prima, questo form rimanda alla stessa pagina.

2. Eseguiamo, con <cfif&gt;., la verifica che il form sia stato inviato e che il valore inviato dal campo "parolaChiave" non sia vuoto. Utilizziamo il tag <cfsearch&gt.; per interrogare la collection "collectionDiscoteca" in base alle parole chiave provenienti dal form:

<!--- ricerca_avanzata.cfm: piccolo motore di ricerca con verity --->

<cfif isDefined('form.parolaChiave') AND form.parolaChiave NEQ "">
     <cfsearch name="risultatiRicerca" collection="collectionDiscoteca" criteria="#form.parolaChiave#">
</cfif>

<p class="titolo">Ricerca avanzata</p>
<p>
     <form method="post">
     <table border="0" cellspacing="1" cellpadding="3">
          <tr>
               <td><p>Parola chiave:</p></td>
               <td><input type="text" name="parolaChiave"></td>
          </tr>
          <tr>
               <td>&nbsp;</td>
               <td><input type="submit" value="Cerca"></td>
          </tr>
     </table>
     </form>
</p>

Il tag <cfsearch>. è molto semplice: con l'attributo "name" diamo un nome all'elenco dei record che sono stati eventualmente trovati, esattamente come l'attributo del tag <cfquery>.; con l'attributo "collection" invece indichiamo la collection nella quale eseguire la ricerca. All'attributo "criteria" si passa, invece, la parola chiave proveniente dal modulo che deve costituire il criterio per filtrare i record.

<cfsearch>. è simile al tag <cfquery>. anche quando dobbiamo visualizzare il risultato della ricerca, che può essere paragonato ad un vero e proprio recordset. Per questo motivo, è sufficiente usare <cfoutput query="risultatiRicerca">; la differenza sta nel fatto che le variabili restituite da <cfsearch>. non sono, ovviamente, i campi di una tabella, ma:

VARIABILE SIGNIFICATO
Title

Il titolo del documento cercato, e nel caso di una query indicizzata, il campo che abbiamo dato all'attributo "title" nel tag <cfindex>.

Score La rilevanza di una parola cercata nel documento, che indica quanto il risultato si avvicina alle parole chiave inserite
RecordsSearched Il numero totale dei record indicizzati
RecordCount Come con <cfquery>., restituisce il numero dei record trovati
Key Il nome del file del documento cercato e, nel caso di una query indicizzata, il campo che abbiamo dato all'attributo "key" nel tag <cfindex>..
Currentrow Come con <cfquery>., restituisce il numero progressivo di ciascun record

3. Visualizza i risultati della ricerca con <cfoutput> e le variabili indicate nella tabella:

<!--- ricerca_avanzata.cfm: piccolo motore di ricerca con verity --->

<cfif isDefined('form.parolaChiave') AND form.parolaChiave NEQ "">
     <cfsearch name="risultatiRicerca" collection="collectionDiscoteca" criteria="#form.parolaChiave#">

     <p>    
     <cfoutput>trovati #risultatiRicerca.RecordCount# album su #risultatiRicerca.RecordsSearched#</cfoutput>
     <table>
         <tr>
              <td></td>
              <td><p><b>Titolo album</b></p></td>
              <td><p><b>Rilevanza</b></p></td>
         </tr>
        <cfoutput query="risultatiRicerca">
         <tr>
              <td><p>#Currentrow#)</p></td>
              <td><p><a href="dettaglio.cfm?id=#key#">#Title#</a></p></td>
              <td><p>#Score#</p></td>
         </tr>
        </cfoutput>
     </table>
     </p>
</cfif>

<p class="titolo">Ricerca avanzata</p>
<p>
     <form method="post">
     <table border="0" cellspacing="1" cellpadding="3">
          <tr>
               <td><p>Parola chiave:</p></td>
               <td><input type="text" name="parolaChiave"></td>
          </tr>
          <tr>
               <td>&nbsp;</td>
               <td><input type="submit" value="Cerca"></td>
          </tr>
     </table>
     </form>
</p>

4. Aggiungi un <cfif> per mostrare un avviso, nel caso la ricerca non produca alcun risultato:

<!--- ricerca_avanzata.cfm: piccolo motore di ricerca con verity --->

<cfif isDefined('form.parolaChiave') AND form.parolaChiave NEQ "">
     <cfsearch name="risultatiRicerca" collection="collectionDiscoteca" criteria="#form.parolaChiave#">

     <cfif risultatiRicerca.RecordCount GT 0>    
          <p>    
          <cfoutput>trovati #risultatiRicerca.RecordCount# album su #risultatiRicerca.RecordsSearched#</cfoutput>
               <table>
                   <tr>
                        <td></td>
                        <td><p><b>Titolo album</b></p></td>
                        <td><p><b>Rilevanza</b></p></td>
                   </tr>
                  <cfoutput query="risultatiRicerca">
                   <tr>
                        <td><p>#Currentrow#)</p></td>
                        <td><p><a href="dettaglio.cfm?id=#key#">#Title#</a></p></td>
                        <td><p>#Score#</p></td>
                   </tr>
                  </cfoutput>
              </table>
           </p>
    <cfelse>
        <p>Non sono stati trovati album corrispondenti alla ricerca.</p>
    </cfif>

</cfif>

<p class="titolo">Ricerca avanzata</p>
<p>
     <form method="post">
     <table border="0" cellspacing="1" cellpadding="3">
          <tr>
               <td><p>Parola chiave:</p></td>
               <td><input type="text" name="parolaChiave"></td>
          </tr>
          <tr>
               <td>&nbsp;</td>
               <td><input type="submit" value="Cerca"></td>
          </tr>
     </table>
     </form>
</p>

5. Infine, aggiungi un link al file ricerca_avanzata.cfm nel file footer.cfm:

<!--- footer.cfm: contiene le dichiarazioni finali della pagina HTML e il piede delle pagine --->

<hr>
<div class="corpoPagina">
     <cfset Oggi = Now()>
     <span class="piede">
     <cfoutput>
          <a href="index.cfm">Home page</a> | <a href="ricerca_semplice.cfm">Ricerca semplice</a> | <a href="ricerca_avanzata.cfm">Ricerca avanzata</a> | <a href="contattami.cfm">Contattami</a> | Oggi è <strong>#LSDateFormat(Oggi, 'dddd, d mmmm yyyy')#</strong>
     </cfoutput>
     </span>
</div>
</body>
</html>

Fai delle prove di ricerca ("http://localhost:8500/discoteca/ricerca_avanzata.cfm") per verificare il funzionamento. La rilevanza, come puoi notare, viene espressa in valori che vanno da zero a uno. Con la funzione NumberFormat() puoi modificare l'aspetto di questo valore, ad esempio per limitarne i decimali.

6. Modifica il file ricerca_avanzata.cfm per dare una formattazione alla variabile "score". La funzione NumberFormat() prende due parametri: il valore da formattare (in questo caso, la variabile) e la "maschera" da dare al numero:

......
<cfoutput query="risultatiRicerca">
    <tr>
        <td><p>#Currentrow#)</p></td>
        <td><p><a href="dettaglio.cfm?id=#key#">#Title#</a></p></td>
        <td><p>#NumberFormat(Score, '_._')#</p></td>
    </tr>
</cfoutput>
......

NumberFormat() dà la formattazione predefinita (americana); se vuoi utilizzare la formattazione italiana, che abbiamo definito come predefinita tramite con il SetLocale(), devi usare la funzione LSNumberFormat(). Come valore da formattare puoi passare alla funzione anche una espressione numerica:

7. trasforma in percentuale la rilevanza dei risultati della ricerca, utilizzando la funzione LSNumberFormat().

......
<cfoutput query="risultatiRicerca">
    <tr>
        <td><p>#Currentrow#)</p></td>
        <td><p><a href="dettaglio.cfm?id=#key#">#Title#</a></p></td>
        <td><p>#LSNumberFormat(Score * 100, '_._')# %</p></td>
    </tr>
</cfoutput>
......

Ultimi articoli Editor

Adobe Edge, la prima animazione HTML5

Come creare una animazione HTML5 con Adobe Edge, esempio completo

Adobe Edge, l'interfaccia

Esaminiamo pannelli e menu del tool gratuito di Adobe per la...

Trasformazioni XSLT in Dreamweaver 8

Primo sguardo agli strumenti XML: trasformare un feed RSS

Layout senza tabelle con Dreamweaver 8

Esaminiamo gli strumenti CSS avanzati del software di Adobe/Macromedia

Il nuovo Dreamweaver 8

Panoramica delle principali novità dell'ultima release del popolare...

Altri articoli

Guide Editor

Guida WebMatrix

Entrare nel mondo dello sviluppo di applicazioni Web con Webmatrix,...

Guida Notepad++

Un editor testuale che funziona perfettamente anche come editor HTML...

Guida Aptana

Creare siti Web o applicazioni con Aptana, l'editor open source,...

Altre guide

Newsletter @Daily HTML.it

Ogni mattina, dal lunedì al venerdì, le novità pubblicate su tutti i siti tecnici del network HTML.it: articoli, guide, notizie dal Web, blog e molto altro.

Iscriviti alla newsletter

Altre newsletter

Corsi in aula

Corso Webmaster base

18 Giugno 2012 a Milano
Disponibilità: 6 Posti

Corso Google AdWords Base

25 Giugno 2012 a Milano
Disponibilità: 7 Posti

Corso Google AdWords Base

05 Giugno 2012 a Roma
Disponibilità: 7 Posti

Corso Webmaster base

11 Giugno 2012 a Roma
Disponibilità: 7 Posti