Forums

ASP

This topic is locked

Search Site

Posted 27 Dec 2001 16:00:27
1
has voted
27 Dec 2001 16:00:27 Roy Steward posted:
I have managed to get hold of a script that will search the site for pages based on a keyword, but I would like to exclude certain files or even folders. I now that I need to declare a variable but I do not now where to go from there. I have enclosed the code to help.

Thanks all

<!-- Search Button Code: plpace in this at the top of the body tag//-->

<table cellspacing=2 cellpadding=2 border=0>
<tbody>
<tr valign=bottom align=middle>
<td bgcolor="#8CA6CE"><font color="#FFFFFF"><b><font size="2" face="Arial, Helvetica, sans-serif">SEARCH</font></b></font></td>
</tr>
<tr valign=top align=middle>
<td>
<table cellspacing=0 cellpadding=1 width=171
border=0 bgcolor=#8CA6CE>
<tbody>
<tr>
<td width="100%"> <font face="verdana, arial, helvetica"
size=-1><small> </small></font>
<table cellspacing=0 cellpadding=4 width="100%"
bgcolor=#8CA6CE border=0>
<tbody>
<tr>
<!--
The chuck of code generates the search box. Every page that has a search box needs it.
//-->
<form action="search.asp" method="post">
<td align=left bgcolor="#FFFFFF">
<input class=formcreate type=text
name=txtKeyWord size="10">
<input class=formcreate type=submit value="GO" name=search>
</td>
</form>
<!--
End of the search form
//-->
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>



Search.asp Code:

<%@ Language=VBScript %>

<%

Option Explicit
Response.Buffer = True

' Set up some FileSystem objects.
dim objFS, objFolder, objFiles, File, FileName, objCheckFile, strSitePath
set objFS = server.CreateObject("Scripting.FileSystemObject"

dim strListofFiles, arrFileList, strPageTitle, iReturnCount
dim objFolders

strListofFiles = ""
iReturnCount = 0

' The search values, search space, and the return value
dim strKeyWord, strFileContents, returnValue, arrKeyWords
dim bKeyWordFound, i, j

' Get the Physical path to the current directory
strSitePath = Server.MapPath("."

' Grab the keyworlds and split them into an array
strKeyWord = Trim(request("txtKeyWord")
arrKeyWords = split(strKeyWord," "

' Get the list of files.
Set objFolder = objFS.GetFolder(strSitePath)


' Sub that grabs all the ".htm" & ".html" files in the given folder and
' recurses through all subfolders.
sub getCompleteFileList(inFolder, Path)

dim oFiles, oFolders, Folder, sPath

' Get all the files and subfolders.
Set oFiles = inFolder.Files
Set oFolders = inFolder.SubFolders

' If we have a subfolder we need the partial path
if (Path <> "" then
sPath = Path + "\"
end if

' Add each ".htm" & ".html" file to the list
For Each File in oFiles
FileName = File.Name

if((Lcase(right(FileName,4)) = ".htm" OR (Lcase(right(FileName,5)) = ".html") then
if (strListofFiles = "" then
strListofFiles = sPath + FileName
else
strListofFiles = strListofFiles + "," + sPath + FileName
end if
end if
Next

' Check all the subfolders for ".htm" & ".html" files
For Each Folder in oFolders
if (Folder.Name <> "images" AND Folder.Name <> "stats" then
call getCompleteFileList(Folder, sPath + Folder.Name)
end if
Next

' Clean up
set File = Nothing
set oFiles = Nothing
set Folder = Nothing
set oFolders = Nothing

end sub

%>
<html>
<head>
<title>Search </title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body bgcolor="#FFFFFF" text="#000000">
<table cellspacing=7 cellpadding=2 border=0 width="100%">
<tbody>
<tr>
<td valign=top align=middle>
<table cellspacing=0 width="100%" border=0>
<tbody>
<tr>
<td align=middle bgcolor=#3366cc>
<table cellspacing=0 cellpadding=2 width="100%" border=0>
<tbody>
<tr>
<td align=middle bgcolor=#ffffff>
<table cellspacing=0 width="100%" border=0>
<tbody>
<tr bgcolor="#F2F2F2">
<td align=middle colspan=4 bgcolor="#F2F2F2">
<div align="left"><b>Search Results</b></div>
</td>
</tr>
<tr bgcolor="#F2F2F2">
<td align=middle colspan=4 bgcolor="#FFFFFF">
<div align="left"></div>
<p align="left">
<!--
The Start of the search specific html code.
It needs a look and feel update.
//-->
</p>
<table width="95%" border="0" cellspacing="1" cellpadding="1" align="center">
<tr bgcolor="#330099">
<td bgcolor="#FFFFFF">
<div align="left"><font color="#FFFFFF"><b> <font color="#666666">You
searched for</font><font color="#000000"> </font></b><font color="#000000"><font color="#FF0000"><%= strKeyWord%></font></font></font></div>
</td>
</tr>
<%
' Only to the search if we got at least one keyword
if (strKeyWord <> "" then

' Call the sub that gets all the files
call getCompleteFileList(objFolder, ""

' Take the big ole string the contains all the files seperated by commas and chop it up.
arrFileList = split(strListofFiles,","

For i=0 to UBound(arrFileList)

' Open the current file and read everything into a single string.
' If the files are huge this could eat a lot or resources.
Set objCheckFile = objFS.OpenTextFile(strSitePath + "\" + arrFileList(i),1,false,0)
strFileContents = objCheckFile.ReadAll

' Default the search flag to false.
bKeyWordFound = false

' For each keyword entered search the file.
for j = 0 to UBound(arrKeyWords)
returnValue = InStr(1,strFileContents,arrKeyWords(j),1)

' If the returnValue isn't zero the keyword was found
' Set the search flage to true and short cut out of the loop.
if (returnValue <> 0) then
bKeyWordFound = true
j = UBound(arrKeyWords)
end if
next

' If a keyword was found include this file in the list.
if (bKeyWordFound) then

' Keep track of the number of results and grab the title of the page for the search display
iReturnCount = iReturnCount + 1

dim startChar, endChar
startChar = InStr(1,strFileContents,"<title>",1)
endChar = InStr(1,strFileContents,"</title>",1)

if (startChar = 0 OR endChar = 0 OR ((startChar + 7) > (endChar - 7))) then
%>
<tr>
<td><font face="Arial, Helvetica, sans-serif" size="2"><a href="<%= arrFileList(i) %>"><%= arrFileList(i) %></a> <%= arrFileList(i) %></font></td>
</tr>
<%
else
strPageTitle = mid(strFileContents,InStr(1,strFileContents,"<title>",1) + 7, InStr(1,strFileContents,"</title>",1) - InStr(1,strFileContents,"<title>",1) - 7)

if (strPageTitle = "" then
strPageTitle = arrFileList(i)
end if
%>
<tr>
<td><font face="Arial, Helvetica, sans-serif" size="2"><a href="<%= arrFileList(i) %>"><%= strPageTitle%></a> <%= arrFileList(i) %></font></td>
</tr>
<%
end if
end if

' Close the file so we can open another one.
objCheckFile.Close
Next

end if
%>
<tr>
<td><font face="Arial, Helvetica, sans-serif" size="2" color="#999999"><%= iReturnCount%> pages found</font></td>
</tr>
<tr>
<td> </td>
</tr>
<%

' Clean up all the objects used.
set objCheckFile = Nothing
set File = Nothing
set objFiles = Nothing
set objFolder = Nothing
set objFS = Nothing

%>
</table>
<!-- the end of the search html -->
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<p> </p>
</body>
</html>

<font face='Tahoma'></font id='Tahoma'>

Replies

Replied 01 Apr 2003 09:13:41
01 Apr 2003 09:13:41 calvin crane replied:
I have the same!
I worked out how to use it and excude certain folders, the problem however is that it looks at all the source code! so if you have buttons or links that are named after keywords which was the case for me every page had a positive result! for example i wanted the keyword table, so also the table tag was being picked up!
it would be ok if i can exclude certain tags to minimise the results.

so this was no good.
I am desperate to find a different piece of code, the most useful thing can be a search page its true but ive yet to find it. I also could do the seach based on code in the database but!!!half of the txt is in dynamic pages and half is not.

mojito

www.vinrougeproductions.com
Replied 04 Apr 2003 12:10:25
04 Apr 2003 12:10:25 calvin crane replied:
what vbscript can i use to delete certain text say for example from a text file

"&lt;table " from a string so a keyword which is actually "table" could be used.

concerning the above search which basically looks at each and every file and writes the page to a textfile.this textfile i would like to remove certain tags like the meta tags for example and certain html tags.

this should be very possible, i suppose replace could be used?

is there a more elegant way.
mojito


www.vinrougeproductions.com

Reply to this topic