In questo tutorial vedremo come realizzare un motore di ricerca per il nostro sito senza usare i database.
Il nostro motore di ricerca interno, infatti, andrà a spulciare di volta in volta il contenuto di ogni singolo file presente sul nostro sito per verificare se al suo interno è contenuta la stringa cercata.
Facciamo un esempio. Poniamo che il nostro sito sia composto da 3 pagine:
- index.html
- hobby.html
- contatti.html
e poniamo di voler cercare la parola "tennis".
Una volta lanciata la ricerca il nostro script aprirà (usando FileSystemObject) ciascuno dei 3 files presenti sul sito al fine di verificare se in uno o più di essi è contenuta la parola "tennis".
Qualora la ricerca avesse buon fine verrà restituito un link alla pagina (ad es. "hobby.html") che contiene il termine cercato.
Ora vediamo in concreto come realizzare il tutto partendo dal form di ricerca.
Ecco il codice html per il modulo:
<form method="POST" action="cerca.asp"> Scrivi cosa cercare: <input type="text" NAME="q"> <input type="submit" value="Cerca!"> </form>Vediamo ora il codice ASP (da salvare come "cerca.asp") che effettuerà la ricerca testuale all'interno di tutti i file presenti sul vs. sito.
<%Come avrete visto abbiamo fatto uso di FileSystemObject per trovare e leggere il contenuto dei file presenti nella root del nostro sito.
'Recuperiamo il valore da cercare..
Dim CosaCercare
CosaCercare = Request.Form("q")
%><html> <head> <title>Risultato della ricerca per <%=CosaCercare%></title> </head> <body>
<p align="center"> Risultato della ricerca per: <b><%=CosaCercare%></b> </p>
<%
Const fsoForReading = 1'Dimensioniamo il FileSytemObject
Dim objFSO
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")'Impostiamo la directory in cui cercare usando MapPath
'nel nostro caso impostiamo la root del sito
Dim objFolder
Set objFolder = objFSO.GetFolder(Server.MapPath("/"))Dim objFile, objTextStream, ContenutoDelFile, FileTrovato
FileTrovato = False'Leggiamo il contenuto di ogni file trovato nella directory
For Each objFile in objFolder.Files
If Response.IsClientConnected then
Set objTextStream = objFSO.OpenTextFile(objFile.Path,fsoForReading)
ContenutoDelFile = objTextStream.ReadAll'Se nel contenuto del file è presente la stringa cercata...
'Stampo a video il link ed in nome del file
If InStr(1,ContenutoDelFile,CosaCercare,1) then
Response.Write "<a href=""/" & objFile.Name & """>" & objFile.Name & "</a><br>" FileTrovato = True
End If'Chiudo il file e proseguo nella ricerca
objTextStream.Close
End If
Next'Se nessun file contiene il termine cercato...
if Not FileTrovato then Response.Write "Nessun risultato trovato..."'Chiudo tutto...
Set objTextStream = Nothing
Set objFolder = Nothing
Set objFSO = Nothing
%> </body> </html>
Un avvertimento: un simile script è molto utile, tuttavia potrebbe risultare piuttosto lento in presenza di un grande numero di file (diverse centinaia) su una macchina condivisa o poco performante.
| Corso ASP Corso completo per la creazione di siti Web dinamici. A partire da 39 €. | |
| Corso ASP da Zero Imparare Microsoft ASP e VBScript da zero. A soli 29 €. | |
| Corso ASP e Access Gestione di un database MS Access con ASP. A soli 29 €. |