Retroceder   Foros del Web > Programación para sitios web > ASP Clásico

Respuesta
 
Herramientas Desplegado
Antiguo 17-abr-2008, 14:37   #1 (permalink)
Adler está en el buen camino
 
Avatar de Adler
 
Fecha de Ingreso: diciembre-2006
Mensajes: 556
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
__________________
Nunca has tenido un sábado sangriento??
Adler está desconectado   Responder Citando
Antiguo 17-abr-2008, 14:56   #2 (permalink)
Colaborador
JuanRAPerez tiene algunos puntos positivos de karma
 
Avatar de JuanRAPerez
 
Fecha de Ingreso: octubre-2003
Mensajes: 1.888
Re: resaltar parámetros de busqueda

busca un poco y lee

Resaltar busqueda

Extraer cadena alrededor de una palabra

Resaltar busqueda

suerte
__________________
JuanRa Pérez
San Salvador, El Salvador
JuanRAPerez está desconectado   Responder Citando
Antiguo 17-abr-2008, 17:56   #3 (permalink)
i_e_s27 tiene algunos puntos positivos de karma
 
Avatar de i_e_s27
 
Fecha de Ingreso: marzo-2008
Ubicación: En mi casa
Mensajes: 195
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!
i_e_s27 está desconectado   Responder Citando
Antiguo 18-abr-2008, 12:12   #4 (permalink)
Adler está en el buen camino
 
Avatar de Adler
 
Fecha de Ingreso: diciembre-2006
Mensajes: 556
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
__________________
Nunca has tenido un sábado sangriento??
Adler está desconectado   Responder Citando
Antiguo 18-abr-2008, 13:23   #5 (permalink)
Colaborador
Shiryu_Libra llegará a ser famoso muy prontoShiryu_Libra llegará a ser famoso muy prontoShiryu_Libra llegará a ser famoso muy pronto
 
Avatar de Shiryu_Libra
 
Fecha de Ingreso: febrero-2007
Ubicación: Localhost/Pruebas....
Mensajes: 2.953
Enviar un mensaje por MSN a Shiryu_Libra Enviar un mensaje por Yahoo  a Shiryu_Libra Enviar un mensaje por Skype™ a Shiryu_Libra
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
Shiryu_Libra está desconectado   Responder Citando
Antiguo 21-abr-2008, 06:26   #6 (permalink)
Adler está en el buen camino
 
Avatar de Adler
 
Fecha de Ingreso: diciembre-2006
Mensajes: 556
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
__________________
Nunca has tenido un sábado sangriento??
Adler está desconectado   Responder Citando
Antiguo 21-abr-2008, 11:49   #7 (permalink)
Adler está en el buen camino
 
Avatar de Adler
 
Fecha de Ingreso: diciembre-2006
Mensajes: 556
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
__________________
Nunca has tenido un sábado sangriento??
Adler está desconectado   Responder Citando
Respuesta

No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 00:58.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93