Foros del Web » Programando para Internet » ASP Clásico »

resaltar parámetros de busqueda

Estas en el tema de resaltar parámetros de busqueda en el foro de ASP Clásico en Foros del Web. Hola, el asunto es que quiero resaltar los parámetros de una busqueda. A traves de la query llega la id de los registros en los ...
  #1 (permalink)  
Antiguo 17/04/2008, 14:37
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 18 años, 4 meses
Puntos: 126
resaltar parámetros de busqueda

Hola, el asunto es que quiero resaltar los parámetros de una busqueda. A traves de la query llega la id de los registros en los que hay que buscar y que palabras hay que buscar en dichos registros.
Como observación decir que esta id no es autoincrementable, es decir, la id -10- la puede tener 200 registros.

Bueno esto es lo que tengo hecho, y no da ningún error pero tampoco imprime nada, deja la página en blanco


Código PHP:
<%
Dim ExplDocregistrosimarcaarray_cadenastrOriginal
ExplDoc 
' Este campo es de texto
Call Registro (rs2)
SQL="SELECT ExplDoc, IBol from table where IBol =   ...."
rs2.Open SQL, fconn
registros=rs2.getrows
Call LimpiarRS (rs2)
Call LimpiarConexion (fconn)
 
For i=0 to UBound(registros,2) ' 
Listo los resultados
marca 
Trim(Request.QueryString("clave")) ' Recoge los parámetros de la busqueda
IF marca = "" then
%>
<%=registros(ExplDoc,i))%>
<%
ELSE
array_cadena  = Split(marca," ")
%>
<%=ResaltaParam(StrOriginal)%>
<%
END IF
Next ' 
i
%> 
En un include

Código PHP:
<%
Dim registrosnExplDocarray_cadenamarca
Dim n
objRegExp 
array_cadena  
Split(marca," ")
Function 
ResaltaParam (strMarcado)
For 
n=0 to UBound(array_cadena
      
Set objRegExp = new RegExp
      With objRegExp
      
.Pattern "\b("&array_cadena(n)&")+\b"
      
.IgnoreCase True
     
.Global = True
      End With
     strMarcado 
objRegExp.replace(registros(ExplDoc,i)), "<span class=""bgC"&n&""">$1</span>")
     
ResaltaParam strMarcado
     Set objRegExp 
nothing
Next n
End 
Function
%> 
He probado muchas cosas y estas son las únicas lineas de código que no dan error.

Gracias
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #2 (permalink)  
Antiguo 17/04/2008, 14:56
Avatar de JuanRAPerez
Colaborador
 
Fecha de Ingreso: octubre-2003
Mensajes: 2.393
Antigüedad: 21 años, 6 meses
Puntos: 27
Re: resaltar parámetros de busqueda

busca un poco y lee

http://www.forosdelweb.com/f15/resal...squeda-116300/

http://www.forosdelweb.com/f15/extra...alabra-115048/

http://www.forosdelweb.com/f15/resal...squeda-116300/

suerte
__________________
JuanRa Pérez
San Salvador, El Salvador
  #3 (permalink)  
Antiguo 17/04/2008, 17:56
Avatar de i_e_s27  
Fecha de Ingreso: marzo-2008
Ubicación: En mi casa
Mensajes: 208
Antigüedad: 17 años, 1 mes
Puntos: 5
Re: resaltar parámetros de busqueda

Yo uso esta funcioncita en mis proyectos:

Primero crea un array con las palabras a buscar (arrBusqueda).
StringAMostrar es donde quieres resaltar las palabras; puede ser un campo "Descripcion" o "Nombre" de una base de datos

Código:
			arrBusqueda = split(strBusqueda," ")
			StringAMostrar = rsBusqueda("nombre")
			Dim pos
			Dim FndPos
			pos = 1
			FndPos = 1
			For z = 0 To UBound(arrBusqueda)
				FndPos = instr(1, StringAMostrar, arrBusqueda(z),1)
				Do While FndPos<>0
					str = Mid(StringAMostrar, 1, (FndPos-1)+len(arrBusqueda(z)))
					newstr = Mid(str, 1, FndPos - 1) & "<span style=background:yellow;font-weight:bold>" & Mid(str, FndPos, len(arrBusqueda(z))) & "</span>"
					StringAMostrar = replace(StringAMostrar, str, newstr)
					pos = FndPos+len(arrBusqueda(z)) + 47
					FndPos = instr(pos, StringAMostrar, arrBusqueda(z),1)
				Loop
			Next
			Response.Write(StringAMostrar)
Saludos!
  #4 (permalink)  
Antiguo 18/04/2008, 12:12
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 18 años, 4 meses
Puntos: 126
Re: resaltar parámetros de busqueda

Hey, gracias a ambos por responder, me habeis sido de gran ayuda

El código finalmente ha quedado así

Código PHP:
<%
Dim ExplDocregistrosimarcaarray_cadenastrOriginal
ExplDoc 
' Este campo es de texto
Call Registro (rs2)
SQL="SELECT ExplDoc, IBol from table where IBol =   ...."
rs2.Open SQL, fconn
registros=rs2.getrows
Call LimpiarRS (rs2)
Call LimpiarConexion (fconn)
 
For i=0 to UBound(registros,2) ' 
Listo los resultados
marca 
Trim(Request.QueryString("clave")) ' Recoge los parámetros de la busqueda
IF marca = "" then
%>
<%=registros(ExplDoc,i)%>
<%
ELSE
array_cadena  = Split(marca," ")
StrOriginal = registros(ExplDoc,i)
%>
<%=ResaltaParam(StrOriginal)%>
<%
END IF
Next ' 
i
%> 
El include

Código PHP:
Dim marcaarray_cadena
Dim n
CoincidenciastrCadenastrMarcado
Function ResaltaParam(strOriginal)
marca Trim(Request.QueryString("clave"))
array_cadena  Split(marca," ")
For 
n=0 to UBound(array_cadena)
Dim objRegExp 
Set objRegExp 
= new RegExp
With objRegExp
.Pattern = ("\b("&array_cadena(n)&")+\b")
.
IgnoreCase True
.Global = True
End With
Set strCadena 
objRegExp.Execute(strOriginal)
For 
Each Coincidencia in strCadena
strMarcado 
objRegExp.replace(strOriginal"<span class=""bgC"&n&""">$1</span>")
Next
ResaltaParam 
strMarcado
Set objRegExp 
nothing
Next n
End 
Function 
Ahora me surge otro problemas con el que no habia contado, si el valor que le paso a expresión está acentuado, repite el registro anterior tantas veces como el número de registros que han de ser mostrados.

Un supuesto

Se han de mostrar 100 registros coincidentes con la consulta. Si el registro número 20 lleva una palabra acentuada y esa palabra hay que resaltarla por que es una de las palabras que llegaron a traves de la query, hasta el registro 19 se muestran correctamente y después se repite ese mismo registro hasta que acabe el ciclo, en este caso 81 veces.

¿Alguna idea?

Gracias
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #5 (permalink)  
Antiguo 18/04/2008, 13:23
Avatar de Shiryu_Libra
Colaborador
 
Fecha de Ingreso: febrero-2007
Ubicación: Cantando "Screenager" en "Kirafa Kaput"
Mensajes: 3.614
Antigüedad: 18 años, 2 meses
Puntos: 88
Re: resaltar parámetros de busqueda

antes de enviar el criterio
Código PHP:
Function Acentos(texto)
    
Dim ComponerTexto
    
For 1 To Len(texto)
        
ComponerTexto Mid(textox1)
        
Select Case ComponerTexto
            
Case "a""à""á""À""Á"    Acentos Acentos "[aàáâÀÁÂ]"
            
Case "e""é""è""È""É"    Acentos Acentos "[eéèêÈÉÊ]"
            
Case "i""ì""í""Ì""Í"    Acentos Acentos "[iìíîÌÍÎ]"
            
Case "o""ò""ó""Ò""Ó"    Acentos Acentos "[oòóôÒÓÔ]"
            
Case "u""ù""ú""Ù""Ú"    Acentos Acentos "[uùúûÙÚÛ]"
            
Case Else                        Acentos Acentos ComponerTexto
        End Select
    Next
End 
Function 
modo de uso
Cita:
sebusca=lCase(Acentos(sebusca))
__________________
"Eres parte del problema, parte de la solucion o parte del paisaje"
Un Saludo desde Desierto de Altar, Sonora, MX.
Shiryu_libra
  #6 (permalink)  
Antiguo 21/04/2008, 06:26
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 18 años, 4 meses
Puntos: 126
Re: resaltar parámetros de busqueda

Gracias Shiryu por responder.

Esa función no me es válida ya que, aunque en el código que imprimí anteriormente no aparace estoy usando escape.

¿Alguna otra idea?

Siguiendo con el tema, estoy teniendo problemas con otro código muy parecido.
En esta ocasión la consulta solo encuentra un registro, pero ese registros puede llegar a tener hasta 20000 palabras, así que para ficilitarle al usuario que encuentre en el doc los terminos que ingreso en el buscado, pues quiero resaltarlos

El problema está en que solamente resalta el último termino ingresado

Código PHP:
marca Trim(Request.QueryString("clave")) ' recoge los terminos de query
array_cadena  = Split(marca," ")
plbraClave = unescape(rs.Fields("Clave")) ' 
este es un listado de palabras claves si alguno de los terminos de la busqueda no encaja con estas palabras clavesse eliminan con la funcion Encuentra
strOriginal 
unescape(rs.Fields("Cuerpo"))  sobre este texto se busca los terminos resultantes de la funcion Encuentra
PLlave 
Encuentra(plbraClave)
Dim arr
arr 
Split(Trim(PLlave), " ")
%>
<%=
ResaltaParam(PLlavestrOriginal)%> 
Estas son las funciones

Código PHP:
Dim nobjRegExpstrClaveCoincidenciastrLlavestrCadenastrMarcado
Function Encuentra (plbraClave' elimina terminos prohibidos
For n=0 to UBound(array_cadena)
Set objRegExp = new RegExp
objRegExp.Pattern = "\b("&array_cadena(n)&")+\b"
objRegExp.IgnoreCase = True
objRegExp.Global = True
Set strClave = objRegExp.Execute(plbraClave)
For Each Coincidencia in strClave
strLlave = strLlave  & Coincidencia.Value & " "
Next
Encuentra = strLlave
Set strClave = nothing
Set objRegExp = nothing
Next '
n
End 
Function

Function 
ResaltaParam (PLlavestrOriginal' resalta terminos
For n=0 to UBound(arr)
Set objRegExp = new RegExp
objRegExp.Pattern = "\b("&arr(n)&")+\b"
objRegExp.IgnoreCase = True
objRegExp.Global = True
Set strCadena = objRegExp.Execute(strOriginal)
For Each Coincidencia in strCadena
strMarcado = objRegExp.replace(strOriginal, "<span class=""bgC"&n&""">$1</span>")
Next
ResaltaParam =  strMarcado
Set strCadena = nothing
Set objRegExp = nothing
Next '
n
End 
Function 
Gracias
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #7 (permalink)  
Antiguo 21/04/2008, 11:49
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 18 años, 4 meses
Puntos: 126
Re: resaltar parámetros de busqueda

Después de dejarlo reposar unas horas logré que funcionar el segundo problema . La sulución era cambiar únicamente cambiar el nombre al segundo argumento que se le pasa a la función ResaltaParam

Function ResaltaParam (PLlave, strMarcado) ' Cambiar strOriginal por strMarcado

Con respecto al primer problemas, lo de las palabras acentuadas aún continuo con el

Agradezco cualquier sugerencia

Gracias
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:22.