ciao a tutti è la prima volta che scrivo in questo forum.
sono poco più di un novellino in asp e girando per i siti ho trovato un motore di ricerca che funziona bene però mi serviva che evidenziasse la parola cercata.Ho trovato proprio in questo sito un articolo di Paolo Pinto sull'argomento :
----------------------------------------------
Nella realizzazione di un sito, dovevo realizzare una pagina per la ricerca di un termine nel database di un glossario.
Avevo quindi la necessità di evidenziare la parola trovata all'interno di un testo in seguito a tale ricerca ed ho scritto una funzione che evidenzia la parola cercata.
Poichè il testo deve essere visualizzato all'interno di una pagina html, per evidenziare la parola ho utilizzato questo codice:
<span style='background-color: rgb(128,0,0); color:
rgb(255,255,255)'><B>testo da evidenziare</B></span>
Ecco in dettaglio il funzionamento di TxtInside:
1) txtSearch è la variabile che assumerà il valore corrispondente alla parola da cercare
2) txt è la variabile che conterrà il testo in cui cercare
3) txtInside è la variabile che conterrà il testo con i tag che evidenziano la parola cercata.
Il principio di funzionamento è il seguente:
1) si calcola la lunghezza del testo in cui cercare: len_txt=len(txt)
2) si calcola la lunghezza della parola da cercare: len_txtSearch = len(txtSearch) (quindi se la parola è 'mare' la variabile len_txtSearch = 4)
3) si crea un loop che 'scorre' tutta la frase alla ricerca della parola, il loop termina appena raggiunta la lunghezza massima della frase.
4) l'istruzione: txtExtracted = mid(txt,i,len_txtSearch) estrae da txt al variare di i tutte le stringhe di lunghezza len_txtSearch e le confronta con la parola cercata.
5) se la stringa in txtExtracted = txtSearch allora con l'istruzione: txtBefore = mid(txt, x, i-x) viene ricavata la stringa che precede.
6) se è stata effettivamente trovata la parola, allora la ricerca deve continuare dai caratteri che seguono questa parola, quindi ci si deve spostare in avanti di i+len_Search caratteri
7) in txtTemp viene memorizzata la somma delle stringhe txtBefore e txtEvid (il nostro testo con i tag html)
8) in txtInside ricorsivamente verranno uniti tutti i pezzi elaborati fino a ricreare l'intera frase di partenza.
Per usare la funzione è sufficiente richiamarla in questo modo (segue la funzione):
<%
response.write TxtInside('prova', 'testo di prova per provare la funzione')
Function TxtInside(txtSearch,txt)
' Restituisce un testo formattato html, evidenziando una determinata parola
' Autore: Paolo Pinto
' email: paolo.pinto@galactica.it
Dim txtEvid
Dim i
Dim x
Dim txtTemp
Dim txtExtracted
Dim len_txt
Dim len_txtSearch
txtEvid = "<span style='background-color: rgb(128,0,0); color:
rgb(255,255,255)'><B>" & txtSearch & "</B></span>"
len_txt=len(txt)
len_txtSearch = len(txtSearch)
i=1
x=1
txtInside = ""
txtTemp = ""
do while i< len_txt+1
txtExtracted = mid(txt,i,len_txtSearch)
if ucase(txtExtracted) = ucase(txtSearch) then
txtBefore = mid(txt, x, i-x)
x=i+len_txtSearch
txtTemp = txtBefore & txtEvid
txtInside = txtInside & txtTemp
end if
i=i+1
loop
txtInside = txtInside & right(txt,len_txt-x+1)
if txtInside = "" then
txtInside = txt
end if
end function
%>
---------------------------------------------------------
e questo è lo script del motore con inseria la funzione Function TxtInside(txtSearch,txt) ma non riesco a capire come fare a far evidenziare la parola cercata nel campo "Descrizione" un grazie mille per l'aiuto che potete darmi
-----------------------------------------------------------
<%
PageName = Request.ServerVariables("PATH_INFO")
SearchMethod = Request.ServerVariables("REQUEST_METHOD")
If SearchMethod = "POST" Then
search = request.form("search")
page = 1
ElseIf SearchMethod = "GET" Then
search = request.QueryString("search")
page = Request.QueryString("page")
End If
respage = 5
%>
<html>
<head>
<title>Ricerca
<% If len(search) > 0 Then %>
"<%=search%>"
<% End If %>
</title>
<style type="text/css">
<!--
.text { font-family: Tahoma, Verdana, Arial, "MS Sans Serif"; font-size: 12px; color: #000033}
.link { font-family: Tahoma, Verdana, Arial, "MS Sans Serif"; font-size: 12px; color: #000066; text-decoration: none}
a.link:link { font-family: Tahoma, Verdana, Arial, "MS Sans Serif"; font-size: 12px; color: #000066; text-decoration: none }
a.link:visited { font-family: Tahoma, Verdana, Arial, "MS Sans Serif"; font-size: 12px; color: #000066; text-decoration: none }
a.link:hover { font-family: Tahoma, Verdana, Arial, "MS Sans Serif"; font-size: 12px; color: #CC0000; text-decoration: underline}
.highlight { background:#FFFF00}
-->
</style>
</head>
<body bgcolor="#FFFFFF" text="#000033" link="#000066" vlink="#000033" alink="#CC0000" leftmargin="1" topmargin="1" marginwidth="1" marginheight="1">
<table width="780" border="0" cellspacing="0" cellpadding="1" align="center" bgcolor="#000033">
<tr >
<td bgcolor="#000033">
<table border="0" cellpadding="2" cellspacing="0" align="center" width="780">
<tr bgcolor="#000033">
<td colspan="2" height="1"></td>
</tr>
<form method="post">
<tr bgcolor="#F3F3F3">
<td width="100" align="left" class="text" bgcolor=""><b>Testo Ricerca</b></td>
<td width="680" align="left" class="text">
<input type="text" name="search" size="30" value="<%=search%>">
<input type="submit" value="CERCA" name="submit">
</td>
</tr>
<tr bgcolor="#000033">
<td colspan="2" align="left" class="text" height="1"></td>
</tr>
</form>
<% If SearchMethod = "POST" And len(search) = 0 Then %>
<tr>
<td colspan="2" height="60" align="center" class="text" bgcolor="#FFFFFF"><b>Digitare un testo per la ricerca</b></td>
</tr>
<tr bgcolor="#000033">
<td colspan="2" height="1"></td>
</tr>
<% End If %>
<%
if len(search) > 0 then
set conn = server.createobject("adodb.connection")
'conn.open "driver={microsoft access driver (*.mdb)};dbq="&server.mappath("ricerca.mdb")
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Inetpub\wwwroot\igiasp\ricerca.mdb"
conn.Open
sql = "select * from tabella_ricerca where"
ArrSearch = Split(search)
x = 0
for each Word In ArrSearch
If Not x = UBound(ArrSearch) Then
sql = sql & " Keywords like '%" & word & "%' and"
Else
sql = sql & " Keywords like '%" & word & "%'"
End If
x = x + 1
Next
'evidenza
Function TxtInside(txtSearch,txt)
' Restituisce un testo formattato html, evidenziando una determinata parola
' Autore: Paolo Pinto
' email: paolo.pinto@galactica.it
Dim txtEvid
Dim i
Dim x
Dim txtTemp
Dim txtExtracted
Dim len_txt
Dim len_txtSearch
txtEvid = "<span style='background-color: rgb(128,0,0); color:
rgb(255,255,255)'><B>" & txtSearch & "</B></span>"
len_txt=len(txt)
len_txtSearch = len(txtSearch)
i=1
x=1
txtInside = ""
txtTemp = ""
do while i< len_txt+1
txtExtracted = mid(txt,i,len_txtSearch)
if ucase(txtExtracted) = ucase(txtSearch) then
txtBefore = mid(txt, x, i-x)
x=i+len_txtSearch
txtTemp = txtBefore & txtEvid
txtInside = txtInside & txtTemp
end if
i=i+1
loop
txtInside = txtInside & right(txt,len_txt-x+1)
if txtInside = "" then
txtInside = txt
end if
end function
'fine evidenza
set rs = server.createobject("adodb.recordset")
rs.open sql, conn, 1, 3
if rs.eof then
%>
<tr align="center">
<td colspan="2" class="text" height="60" bgcolor="#FFFFFF"><b>Nessun
risultato trovato</b></td>
</tr>
<tr align="center" bgcolor="#000033">
<td colspan="2" class="text" height="1"></td>
</tr>
<%
else
rs.pagesize = respage
rs.absolutepage = page
%>
<tr>
<td colspan="2" class="text" bgcolor="#FFFFFF"><b>Pagina
<%=page%>/<%=rs.pagecount%>
- Risultati relativi alla ricerca: "<%=search%>" - Totale documenti
trovati <%=rs.recordcount%></b></td>
</tr>
<tr bgcolor="#000033">
<td colspan="2" class="text" height="1"></td>
</tr>
<tr>
<td colspan="2" bgcolor="#FFFFFF">
<table width="740" border="0" cellspacing="0" cellpadding="2" align="center">
<tr>
<td width="200" valign="top" class="link">
<% If clng(page) > 1 Then %>
<a href="<%=PageName%>?page=<%=page - 1%>&search=
<%=Server.UrlEncode(search)%>" class="link"><<
Precedente</a>
<% Else %>
<< Precedente
<% End If %>
</td>
<td width="140" valign="top" class="text"><b> Pagine trovate:
</b></td>
<td width="340" valign="top">
<table widht="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<%
For pag = 1 to rs.pagecount
if clng(page) = pag then
%>
<td width="34" align="right" class="link"><b><%=pag%></b></td>
<% else %>
<td width="34" align="right" class="link"><a href="<%=PageName%>?page=<%=pag%>&search=
<%=Server.UrlEncode(search)%>" class="link"><%=pag%></a></td>
<%
end if
If Right(pag,"1") = "0" Then
%>
</tr>
<tr>
<%
End If
Next
%>
</tr>
</table>
</td>
<td width="200" valign="top" class="link" align="right">
<% If clng(page) < rs.pagecount Then %>
<a href="<%=PageName%>?page=<%=page + 1%>&search=
<%=Server.UrlEncode(search)%>" class="link">Successivo
>></a>
<% Else %>
Successivo >>
<% End If %>
</td>
</tr>
</table>
</td>
</tr>
<tr bgcolor="#000033">
<td colspan="2" height="1"></td>
</tr>
<%
for i = 1 to respage
if not rs.eof then
%>
<tr bgcolor="#EFEFEF">
<td class="text" valign="top"><b>Titolo</b></td>
<td class="text" valign="top"><b><%=rs("Titolo")%></b></td>
</tr>
<tr bgcolor="#FFFFFF">
<td class="text" valign="top"><b>Descrizione</b></td>
<td class="text" valign="top">
<%= Replace(rs("Descrizione"),vbCrLf,"<br>") %></td>
</tr>
<tr bgcolor="#EFEFEF">
<td class="text" valign="top"><b>URL</b></td>
<td class="link" valign="top"><a href="<%=rs("Collegamento")%>" target="_blank" class="link"><%=rs("Titolo")%></a></td>
</tr>
<tr bgcolor="#000033">
<td colspan="2" class="link" height="1"></td>
</tr>
<%
rs.movenext
end if
next
%>
<tr>
<td width="780" colspan="2" bgcolor="#FFFFFF">
<table width="740" border="0" cellspacing="0" cellpadding="2" align="center">
<tr>
<td width="200" valign="top" class="link">
<% If clng(page) > 1 Then %>
<a href="<%=PageName%>?page=<%=page - 1%>&search=
<%=Server.UrlEncode(search)%>" class="link"><<
Precedente</a>
<% Else %>
<< Precedente
<% End If %>
</td>
<td width="140" valign="top" class="text"><b> Pagine trovate:
</b></td>
<td width="340">
<table widht="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<%
For pag = 1 to rs.pagecount
if clng(page) = pag then
%>
<td align="right" width="34" class="link"><b><%=pag%></b></td>
<% else %>
<td align="right" width="34" class="link"><a href="<%=PageName%>?page=<%=pag%>&search=
<%=Server.UrlEncode(search)%>" class="link"><%=pag%></a></td>
<%
end if
If Right(pag,"1") = "0" Then
%>
</tr>
<tr>
<%
End If
Next
%>
</tr>
</table>
</td>
<td width="200" valign="top" class="link" align="right">
<% If clng(page) < rs.pagecount Then %>
<a href="<%=PageName%>?page=<%=page + 1%>&search=
<%=Server.UrlEncode(search)%>" class="link">Successivo
>></a>
<% Else %>
Successivo >>
<% End If %>
</td>
</tr>
</table>
</td>
</tr>
<tr bgcolor="#000033">
<td width="780" colspan="2" height="1"></td>
</tr>
<%
end if
rs.close
set rs = nothing
conn.close
set conn = nothing
end if
%>
</table>
</td>
</tr>
</table>
</body>
</html>