![]() |
|
Un motore di ricerca con Xml e Javascript
Comparso su HTML.it il 6 Settembre 2002 - E' vietata la riproduzione, anche parziale, senza esplicito consenso dell'autore
<?xml version="1.0"?>
<root>
<ricerca>
<titolo>Pippo</titolo>
<descrizione>Sezione dedicata a Pippo</descrizione>
<url>pippo.html</url>
</ricerca>
<ricerca>
<titolo>Pluto</titolo>
<descrizione>Sezione dedicata a Pluto</descrizione>
<url>pluto.html</url>
</ricerca>
<ricerca>
<titolo>Paperino</titolo>
<descrizione>Sezione dedicata a Paperino</descrizione>
<url>paperino.html</url>
</ricerca>
</root>
In seguito, in fase di realizzazione dello script Javascript, ci tornerà utile come predetto l'oggetto recordset di Xml che si interfaccia ad con un file Xml sfruttando i nomi dei campi (in questo caso quindi titolo, url e descrizione), nè più nè meno come lavora l'oggetto ADO (ActiveX data Object) di Microsoft.Attenzione, non sto uscendo fuori tema! ADO è un controllo in grado di stabilire una connessione con un database sulla scorta di un motore (driver) chiamato ODBC (Open Database Connectivity): ADO lavora in Xml!!! E' quindi ovvio pensare che l'oggetto recordset di Xml, sulla scorta delle informazioni appena date, sia perfettamente in grado di lavorare in locale seguendo gli standard dettati dal W3C per Javascript. Costruzione del modulo di ricerca Html e della struttura di output Il file Html che andremo a presentare è minimamente formattato per essere eventualmente già bello e pronto per l'uso, è di una semplicità che sfiora i livelli del quasi grado di minima esperienza in Html :-) lo chiameremo ricerca.htm, vediamo il codice: <html> <head> <title>lukeonweb.net</title> <basefont size="2" face="Verdana"> <script language="javascript" src="elabora.js"></script> </head> <body onLoad="document.modulo.cerca.focus()"> <xml id="id_database" src="database.xml"></xml> <div> <form name="modulo"> Cerca nel sito <input type="text" name="cerca"> <input type="button" value="Cerca" onClick="Ricerca()"> </form> </div> <div id="risultati"></div> </body> </html>Il file è, nello svolgimento della sua funzione, divisibile in tre punti essenziali: 1. includiamo il file Javascript esterno (che creeremo tra breve) con la stringa <script language="javascript" src="elabora.js"></script>2. ci "connettiamo" al file database.xml con la stringa <xml id="id_database" src="database.xml"></xml>oltre a stabilire un source per localizzare il file Xml (che in questo caso si trova nella stessa posizione) gli assegniamo un identificativo di tipo id che ci servirà in seguito nello script Javascript per collaborare con l'oggetto recordset ed identificare in maniera univoca l'Xml di cui sopra 3. creiamo un layer di testo vuoto per visualizzare in output sulla pagina i record trovati all'interno del file Xml, assegnando anche a questo un'altro identificativo di tipo id <div id="risultati"></div>Elaborazione Javascript del "database" Xml Siamo sul rettilineo finale! Creiamo adesso il file elabora.js ed inseriamo in maniera dogmatica il seguente codice, comunque opportunamente commentato:
function Ricerca() {
//Localizziamo la casella di testo del modulo Html di ricerca
//ed eseguiamo un controllo case-insensitive col metodo toUpperCase()
var stringa = document.modulo.cerca.value.toUpperCase();
//Creiamo un controllo per cui se la ricerca viene eseguita per nessun carattere
//verrà restituito all'utente un messaggio di avviso direttamente a video sulla pagina
if ((stringa == "") || (stringa == "undefined")) {
risultati.innerHTML = "Inserire un termine per eseguire una ricerca";
return false;
}
//Ci posizioniamo ora sul primo record trovato sul file Xml
id_database.recordset.moveFirst();
//In questa variabile (inizialmente vuota) costruiremo dinamicamente
//il testo opportunamente formattato dell'output della ricerca
var estrai = "";
//Eseguiamo un ciclo while() che sfoglia i record del file Xml fino all'ultimo
while (!id_database.recordset.EOF) {
var titolo = id_database.recordset("titolo").value.toUpperCase();
if (titolo.indexOf(stringa) >= 0) {
estrai += "<div><a href=" + id_database.recordset("url") + ">"
+ id_database.recordset("titolo")
+ "</a><br>" + id_database.recordset("descrizione")
+ "</div><br>";
}
//e ci riposizioniamo all'inizio del file
id_database.recordset.moveNext();
}
//Verifichiamo che ci siano record disponibili per la ricerca
//se non ce ne sono restituiamo all'utente un messaggio di avviso
if ((estrai == "") || (estrai == "undefined")) {
risultati.innerHTML = "Nessun risultato per la ricerca";
return false;
}
//oppure i record trovati
else {
risultati.innerHTML = estrai;
}
}
Credo che i commenti non lascino spazio a molti dubbi sul funzionamento di questo script, l'unica parte che vorrei riprendere ed analizzare un pochino più approfonditamente riguarda il ciclo while() sull'oggetto recordset, ripropongo il codice:
while (!id_database.recordset.EOF) {
var titolo = id_database.recordset("titolo").value.toUpperCase();
if (titolo.indexOf(stringa) >= 0) {
estrai += "<div><a href=" + id_database.recordset("url") + ">"
+ id_database.recordset("titolo")
+ "</a><br>" + id_database.recordset("descrizione")
+ "</div><br>";
}
id_database.recordset.moveNext();
}
Il ciclo si perpetua fino a quando il recordset non è diverso (cioè fino a quando non raggiunge) la fine del file Xml, dopo averlo sfogliato tutto, per questo utilizziamo la proprietà EOF (End Of File), dobbiamo adesso identificare il titolo del record che estrarremo dal file Xml (che funge anche da parola chiave per la ricerca), utilizzando la sintassi id_database.recordset("titolo"), ovvero "il recordset (associato al campo titolo)", per eseguire la ricerca utilizziamo il metodo indexOf() passandogli la variabile stringa associata alla casella di testo del modulo di ricerca, se trova una rispondenza allora il settaggio avviene su true, altrimenti su false (ovvero stabiliamo se restituire o meno risultati).Il metodo moveNext() associato all'oggetto recordset in questione, termina il ciclo e ci riposiziona virtualmente al primo record del file Xml. Conclusioni Ci siamo limitati a sviluppare solo una serie di ragionamenti, al dilà del fatto che abbiamo utilizzato una determinata tecnologia implementata con una data sintassi, gli stessi ragionamenti possono essere semplicemente convertibili ed essere utilizzati per sviluppare applicazioni analoghe, simili, o anche diverse, col linguaggio e con gli strumenti che più ci convengono. Che sia un bene o che sia un male ricordiamoci sempre che una tale tecnologia difficilmente garantisce il funzionamento con browser, ma soprattutto server Web che non siano di casa Microsoft. |
IN EVIDENZA
Una slidegallery con jQuery
Pagamenti online con PayPal e PHP
Breve guida a jQuery
Effetto ombra su testo con Photoshop
Guadagna col tuo sito grazie a TradeD...
Guida XHTML
Riscrivere le URL con Asp
Riavviare IIS
HTTP 500 internal server error
Generare password casuali in Javascri...
Errore 80004005: Cannot update. Datab...
Introduzione ad Ajax ed Asp con Jscri...
Referenze dei Tag Html
Stringhe di connessione via ODBC e Ol...
Referenze dei fogli di stile Css
Le espressioni regolari in Javascript
|
||||
© 2001/2010 lukeonweb.net - A cura di Luca Ruggiero, Partita IVA 05564851219 -
Privacy |
Pubblicità |
Contatti
| |||||