Forums

This topic is locked

Search Site

Posted 27 Dec 2001 16:26:53
1
has voted
27 Dec 2001 16:26:53 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>



Reply to this topic