Avatar billede canedo Nybegynder
07. november 2002 - 18:11 Der er 24 kommentarer og
1 løsning

Highlight funktion

Jeg har nu længe forgæves med forskellige scripts forsøgt at få en highlight funktion på mine søgeresultater, som altså gør søgeordet bold eller hvad ved jeg.

Hvordan får jeg en highlight funktion flettet sammen med min søgning - med disse strenge og variabler?

If ord <> "" Then
Dim Query, rs, total, Resultat
Query = "SELECT * FROM Links WHERE "
Query = Query & "Title LIKE '%" & ord & "%' OR Description LIKE '%" & ord & "%'"
Query = Query & "ORDER BY Title"
Set rs = Connect.Execute (Query)
Avatar billede medions Nybegynder
07. november 2002 - 18:33 #1
Avatar billede edutasia Nybegynder
07. november 2002 - 18:38 #2
Denne funktion skulle kunne gøre det - den sætter <span class=clSearchWord> og </span>- tags omkring søgeordet, så du skal altså blot huske at definere en klasse ved navn clSearchWord:

Function replaceSearchWord(strToReplace, strSearchWord)
    Dim regEx, strRep, strRet, Match, Matches
    Set regEx = new RegExp
    regEx.Pattern = strSearchWord
    regEx.IgnoreCase = true
    regEx.Global = true
    Set Matches = regEx.Execute(strToReplace)
    For Each Match in Matches
        strRet = Left(strToReplace, Match.FirstIndex) & "<span class=clSearchWord>"
        strRet = strRet & Match.Value & "</span>"
        strRet = strRet & Mid(strToReplace, Match.FirstIndex + Match.Length + 1)
    Next
    replaceSearchWord = strRet
End Function

Eksempel:

Response.Write replaceSearchWord(rs("Title"), ord)
Response.Write replaceSearchWord(rs("Description"), ord)
Avatar billede canedo Nybegynder
07. november 2002 - 18:47 #3
edutasia >
Hvordan bytter jeg:
Response.Write replaceSearchWord(rs("Title"), ord)
ud med:
<%=rs("Title")%>
?
Avatar billede medions Nybegynder
07. november 2002 - 18:50 #4
<%=replaceSearchWord(rs("Title"), ord)%>

//>Rune
Avatar billede canedo Nybegynder
07. november 2002 - 18:55 #5
den gør ikke det rigtige. Den udskriver kun ordet, men ikke resten af hele resultatet. Min søgefunktion er gået tatalt amok. Hvor jeg før kunne søge på "tour" og få 5 resultater, så får jeg nu 10 resultater, og den skriver slet ikke resten af "Description" ud KUN selve det ord jeg har søgt på...?¿? Noget er helt galt.
Avatar billede canedo Nybegynder
07. november 2002 - 18:59 #6
Her er hele scriptet:

<%
Dim ord
ord = Request.QueryString("Soegeord")
ord = Replace(ord,"'","''")
If ord = "" Then
  Response.Write "Søg i databasen"
End If

If ord <> "" Then
Dim Query, rs, total, Resultat
Query = "SELECT * FROM Links WHERE "
Query = Query & "Title LIKE '%" & ord & "%' OR Description LIKE '%" & ord & "%'"
Query = Query & "ORDER BY Title"
Set rs = Connect.Execute (Query)

Function replaceSearchWord(strToReplace, strSearchWord)
    Dim regEx, strRep, strRet, Match, Matches
    Set regEx = new RegExp
    regEx.Pattern = strSearchWord
    regEx.IgnoreCase = true
    regEx.Global = true
    Set Matches = regEx.Execute(strToReplace)
    For Each Match in Matches
        strRet = Left(strToReplace, Match.FirstIndex) & "<span class=clSearchWord>"
        strRet = strRet & Match.Value & "</span>"
        strRet = strRet & Mid(strToReplace, Match.FirstIndex + Match.Length + 1)
    Next
    replaceSearchWord = strRet
End Function

'------skriver hvor mange resultater man har fået
Resultat = "Select count(*) as Found from Links WHERE Title LIKE '%" & ord & "%' OR Description LIKE '%" & ord & "%'"
Set Resultat =  connect.Execute(Resultat)
total = Resultat("Found")

if rs.EOF Then
Response.Write "<p>Desværre er der ingen links der matcher dit s&oslash;geord: '<font face='fixedsys, system, courier'>" & ord & "</font>'.</p>"

Else If total = 1 Then
Response.Write "Din s&oslash;gning p&aring;&nbsp;'<font face='fixedsys, system, courier'>" & ord & "</font>'&nbsp;gav kun&nbsp;" & total & "&nbsp;resultat:<br><br>"


Else
Response.Write "Din s&oslash;gning p&aring;&nbsp;'<font face='fixedsys, system, courier'>" & ord & "</font>'&nbsp;gav&nbsp;" & total & "&nbsp;resultater:<br><br>"
End If



do until rs.EOF
%>

<!------------------- oplistning ---------------------------->

<b><a href="http://<%=rs("Url")%>" target="_blank"><%=replaceSearchWord(rs("Title"), ord)%></a></b>
<br><font color="#CA7402">
<%=replaceSearchWord(rs("Description"), ord)%><%If rs("Favorit")=2 Then%><nobr><small><font color="#000099">&nbsp;|favorit link|<font color="#CA7402"></small></nobr><%End If%>
<br><br>
<% rs.MoveNext %>
<% loop %>
<%End If%>
<%End If%>
Avatar billede canedo Nybegynder
07. november 2002 - 19:05 #7
den replacer hele indholdet af Description og Title med selve søgeordet (ord). Så resultatet bliver forkert, f.eks.:
Tour
tour

TOUR
tour
Avatar billede canedo Nybegynder
07. november 2002 - 19:10 #8
Hvordan får jeg funktionen lavet om, sådan at resten af mine records også bliver udskrevet?
Avatar billede edutasia Nybegynder
07. november 2002 - 19:15 #9
Øjeblik - det var en funktion, som jeg selv bruger på en søgeside, der er lidt anderledes opbygget - så jeg skal lige gennemskue, hvor det går galt her...
Avatar billede canedo Nybegynder
07. november 2002 - 19:23 #10
Den må helst ikke være case sensitive.
Avatar billede edutasia Nybegynder
07. november 2002 - 19:27 #11
Glemte i hvert fald at initialisere strRet - beklager fejlen:

Function replaceSearchWord(strToReplace, strSearchWord)
    Dim regEx, strRep, strRet, Match, Matches
    Set regEx = new RegExp
// det er næste linie, der manglede før
    strRet = strToReplace
    regEx.Pattern = strSearchWord
    regEx.IgnoreCase = true
    regEx.Global = true
    Set Matches = regEx.Execute(strToReplace)
    For Each Match in Matches
        strRet = Left(strToReplace, Match.FirstIndex) & "<span class=clSearchWord>"
        strRet = strRet & Match.Value & "</span>"
        strRet = strRet & Mid(strToReplace, Match.FirstIndex + Match.Length + 1)
    Next
    replaceSearchWord = strRet
End Function
Avatar billede canedo Nybegynder
07. november 2002 - 19:31 #12
Så får jeg en:
Der opstod en Microsoft VBScript-kørselsfejl fejl '800a000d'
Typerne stemmer ikke overens: 'regEx.Execute'
/canedo/kdlang/search.asp, linje 57

linje 57:
<%
Function replaceSearchWord(strToReplace, strSearchWord)
    Dim regEx, strRep, strRet, Match, Matches
    Set regEx = new RegExp
    strRet = strToReplace
    regEx.Pattern = strSearchWord
    regEx.IgnoreCase = true
    regEx.Global = true
57> Set Matches = regEx.Execute(strToReplace)
    For Each Match in Matches
        strRet = Left(strToReplace, Match.FirstIndex) & "<span class=clSearchWord>"
        strRet = strRet & Match.Value & "</span>"
        strRet = strRet & Mid(strToReplace, Match.FirstIndex + Match.Length + 1)
    Next
    replaceSearchWord = strRet
End Function
%>
Avatar billede canedo Nybegynder
07. november 2002 - 19:38 #13
.. men jeg får det rigtige antal resultater, bare en kørselsfejl, pg.a. at nogle typer ikke stemmer overens... hvad det end betyder?¿?
Avatar billede edutasia Nybegynder
07. november 2002 - 19:52 #14
Hvilke(t) søgeord bruger du - og er der nogle af felterne i db'en, der evt. kan være tomme?
Avatar billede canedo Nybegynder
07. november 2002 - 19:57 #15
Både alle titel felterne og description felterne er fuldte. Og når jeg søger så ved jeg med min gamle søgefunktion at der skulle komme nogle resultater frem...
Avatar billede canedo Nybegynder
07. november 2002 - 20:00 #16
skal jeg mon skifte nogle af ordene ud fra Funktion? f.eks. strToReplace eller sådan noget?
Avatar billede edutasia Nybegynder
07. november 2002 - 20:02 #17
Jeg er bare ude på at finde ud af, om der kan være poster, hvor strToReplace IKKE er en gyldig tekststreng, eller søgninger, hvor strSearchWord IKKE umiddelbart er en gyldig Regular Expression - f.eks. fordi der er specialtegn i søgeordet
Avatar billede canedo Nybegynder
07. november 2002 - 20:07 #18
Hvilke tegn kunne være specialtegn?
Avatar billede canedo Nybegynder
07. november 2002 - 20:09 #19
kunne ":" være et specialtegn? eller gåseøjne eller paranteser? Fordi dem er der masser af i rs("Title")
Avatar billede edutasia Nybegynder
07. november 2002 - 20:25 #20
Ja, jeg vil tro, at alle tre eksempler tæller med blandt specialtegn (jeg ved ikke helt præcist, hvilke der gør - har aldrig set en liste). Prøv engang at sætte \ foran alt, hvad der KAN være et specialtegn, når du søger. Altså IKKE i db'en - bare i søgefeltet. Skriv f.eks. "c\:" i stedet for "c:" og se, om det hjælper. Hvis det gør, må vi lave en tilføjelse til funktionen..
Avatar billede canedo Nybegynder
07. november 2002 - 20:29 #21
edutasia >
tak :-) jeg tester det i morgen... har siddet her hele dagen. Håber du kigger forbi i morgen også.
Avatar billede canedo Nybegynder
08. november 2002 - 07:39 #22
OKAY, så er jeg her igen. Jeg kan simpelthen ikke forstå hvorfor det er så kompliceret at lave en highlight. Jeg må erkende, at der er meget langt endnu inden jeg føler mig hjemme i scripting...
Avatar billede canedo Nybegynder
08. november 2002 - 17:49 #23
Jeg opgiver highlight funktionen.
Avatar billede canedo Nybegynder
08. november 2002 - 17:49 #24
lukker
Avatar billede lklingenberg Nybegynder
09. juli 2003 - 13:23 #25
edutasia:
Din funktion virker fint - se spm. 374140!
TAK for det!
/Lars
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester