PDA

Arată versiune īntreagă : script "SEARCH" pentru site



agelu
28.06.2009, 19:46
Acesta este un script fara baza msql !
sa vedem...
1.insereaza in pagina index ,casuta ta de cautare, intre: <body>...</body>

<div class="center"><form name="searchform" method="get" action=
"search/search.htm" id="searchform">
<label for="search"><input type="text" id="search" name=
"keywords" size="18" maxlength="140" /><input type="submit" name="Search" value="Search" /></label>
</form></div>

2.se creeaza un folder "search" unde se pun urmatoarele :

a) index.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>
<head>
<title>Error Page</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta http-equiv="refresh" content="5;url=http://www.yoursite.com">
</head>
<body>

<h1>No Page found</h1>

<h2>Return to <a href="http://www.yoursite.com">www.yoursite.com</a></h2>

</body>
</html>
b) search.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<STYLE TYPE="text/css">
</STYLE>
<link rel="stylesheet" href="xsearch.css" >
<title>Website Search Facility</title>

<script type="text/javascript" language="Javascript" src="xsearch.js"></script>
<script type="text/javascript" language="Javascript" src="db.js"></script>

<body>
<script type="text/javascript" language="Javascript">
initXsearch();
</script>
</body>
</html>

c) xsearch.js

/* Adapted from code by */
/* developed by P.Bestebroer */
/* http://www.dynamic-core.net */

function trecords(){
this.index=(trecords.count++)
this.link=''
this.keywords=''
this.description=''
return this
}
trecords.prototype.set=function(link,keywords,desc ription) {
this.link=link
this.keywords=keywords
this.description=description
}
trecords.prototype.searchstring=function() { return this.link+' '+this.keywords+' '+this.description }
trecords.prototype.count=0

function add(link,keywords,description) {
al=records.length
records[al]=new trecords()
records[al].set(link,keywords,description)
}

records = new Array()
finds=0
sites=0
version="v5.2"
andresult=false
SortResults=true
display_start=0
displast=10
function qsort(f, l){ // not used anymore, causes stack-overflow in large database
// Qsort function by Rob B.
var a=f
var b=l
var s
var m = results[(a+b)>>1].val
while (a<=b) {
while (results[a].val>m) {a++}
while (m>results[b].val) {b--}

if (a<=b) {
s=results[a]
results[a]=results[b]
results[b]=s
a++
b--
}
}
if (f<b) this.qsort(f, b)
if (a<l) this.qsort(a, l)
}
function bsort() {
for (var i=results.length-1; i>=0; i--) {
for (var j=i; j>=0; j--) {
if (results[i].val>results[j].val) {
s=results[i]
results[i]=results[j]
results[j]=s
}
}
}
}

function searchAll(keyword){
var timeA=new Date()
var nw=0
finds=0
sites=0

var x = parseIt(keyword)
if(x == -1) return
total_keywords=x

document.open()
document.clear()
document.write('<link rel="stylesheet" href="xsearch.css">')
AddBody()

if (keyword.length>50) keyword=keyword.substring(0,60)+"..."

results=new Array()
for (q=0; q<records.length; q++) {
results[q]=new Array()
results[q].rec=q
results[q].val=0
}

for (nw=0; nw<keywords.length; nw+=1) search(keywords[nw])
if (andresult) {
for (a=0; a<results.length; a+=1) {
if (results[a].val>0) {
if (results[a].val<=(total_keywords-1)<<1) {
results[a].val=0
sites-=1
}
}
}
}
if (SortResults && keywords!='[all]') bsort()

// Now we build the output page
displast=display_start
displast+=10
if (displast>sites) displast=sites

var timeB=new Date()

if (finds==0) { display_start=-1; displast=0 }
document.write("<h3>Showing results <b>"+(display_start+1)+"-"+(displast)+"</b> of <b>"+sites+"</b> for <b>"+keyword+"</b> your search took <b>"+((timeB-timeA)/1000)+"</b> seconds.</h3>")

if (displast>sites && finds!=0) displast=sites+1


if (finds==0) {
document.write("<h3>no hits on <b>''"+keyword+"''</b></h3>"+
"<p>Your search - <b>"+keyword+"</b> - did not match any documents in this database.</p>"+
"<LI>Make sure all words are spelled correctly.</li>"+
"<LI>Try using fewer words.</li>"+
"<LI>Try using more general keywords.</li>"+
"<LI>Try different keywords.</li></span>"+
"</p>")
DisplayXSearch()
document.close()
return
}

q2=display_start
q3=displast
for (q=display_start; q<q3; q+=1) {
if (results[q].val>0) {
rc=results[q].rec
document.write("<span class='xtitle'>"+records[rc].link+"</span><br>")
x1=records[rc].link.indexOf('http://')
if (x1==-1) x1=records[rc].link.indexOf('href=')+5
else x1+=7
x2=records[rc].link.indexOf('>')-1
if (x1>0 && x2>0) {
tmp=records[rc].link.substring(x1,x2)
x2=tmp.indexOf(' ')
if (x2>0) tmp=tmp.substring(0,x2)
if (tmp.substring(0,1)=="'") tmp=tmp.substring(1,tmp.length-2)
if (tmp.substring(0,1)=='"') tmp=tmp.substring(1,tmp.length-1)
document.write("<table border=0 width=500><tr><td><span class='xresult'>"+records[rc].description+"</span></td></tr></table><span class='xlocation'>"+tmp+"</span><br><br>")
}
q2++
}
}

if (finds>10) {
document.write("<BR>")
pages=Math.round(finds/10)
if (finds%10<6) pages++

// Create the parameter string
paramstring=searchname+"?keywords="+keyword+"&and="+andresult+"&sort="+SortResults

document.write("<span class='xsmall'>")
if (display_start>0) document.write("<a href='"+paramstring+"&disp="+(display_start-10)+"'>previous page</a>")
document.write("&nbsp;&nbsp;&nbsp;")

for (i=1; i<=pages; i+=1){
if ((((i-1)*10)+1)<=sites) document.write("<a href='"+paramstring+"&disp="+(((i-1)*10))+"'>"+i+"</a>&nbsp&nbsp ")
}
document.write("&nbsp;&nbsp;&nbsp;")
if (displast<=sites) document.write("<a href='"+paramstring+"&disp="+(displast)+"'>Next page</a>")
document.write("</span>")
}
DisplayXSearch()
document.close()
}

function Cat() {
document.open()
document.clear()
document.write('<link rel="stylesheet" href="xsearch.css">')
AddBody()
DisplayXSearch()
document.close()
}

function stripInput(key) {
while(key.substring(0,1) == "," || key.substring(0,1) == " " ) key = key.substring(1,key.length)
while(key.substring(key.length-1,key.length) == "," || key.substring(key.length-1,key.length) == " ") key = key.substring(0,key.length-1)
return key
}

function parseIt(key) {
key=stripInput(key)+" "
var y=0

while(key.indexOf(" ") > 0) {
if (key.substring(0,1)=='"') {
var pos=key.indexOf('"',2)
keywords[y]=key.substring(1,pos)
keywords[y]=stripInput(keywords[y])
y++
key=key.substring(pos+1,key.length)
} else {
var pos=key.indexOf(' AND ')
if ((pos>0) && (key.indexOf(' ')>=pos)) {
pos=key.indexOf(' ',pos+5)
keywords[y]=key.substring(0,pos)
keywords[y]=stripInput(keywords[y])
y++
key=key.substring(pos+1,key.length)
if (key.substring(0,4)=='AND ') {
pos=keywords[y-1].indexOf(' ')+5
key=keywords[y-1].substring(pos,keywords[y-1].length)+' '+key
}
} else {
var pos=key.indexOf(' OR ')
if ((pos>0) && (key.indexOf(' ')>=pos)) {
pos=key.indexOf(' ')
keywords[y]=key.substring(0,pos)
keywords[y]=stripInput(keywords[y])
if (keywords[y]!=keywords[y-1]) y++
key=key.substring(pos+1,key.length)
pos=key.indexOf('OR ')
key=key.substring(pos+3,key.length)
pos=key.indexOf(' ')
keywords[y]=key.substring(0,pos)
keywords[y]=stripInput(keywords[y])
y++
key=key.substring(pos+1,key.length)
if (key.substring(0,3)=='OR ') key=keywords[y-1]+' '+key
} else {
var pos = key.indexOf(" ")
keywords[y]=key.substring(0,pos)
keywords[y] = stripInput(keywords[y])
y++
if(y > 50) return -1
key=key.substring(pos+1,key.length)
}
}
}
}
return y-1
}

var keywords = new Array()
var results

function AddBody() {
var keytext='"'+searchname+'?keywords="+'
var andtext='"&and="+'

document.write('<script>function doSearch(){'+
'searchwords=document.searchform.searchwords.value ; '+
'while (searchwords.indexOf(" ")>-1){ pos=searchwords.indexOf(" ");'+
'searchwords=searchwords.substring(0,pos)+"+"+searchwords.substring(pos+1); }'+
'document.location='+keytext+' searchwords+'+andtext+'"0"}'+
'<'+'/'+'script>'
)

templateBody()
document.write("<form name='searchform' method='post' action='javascript:doSearch()'><table border='0' width='100%'><tr><td align='center'><p><input name='searchwords' type='text' size='30'>&nbsp;&nbsp;<a href='javascript:doSearch()'>"+ButtonCode+"</a></p></td></tr></table></form><hr size=1>")
if (usebannercode) bannerCode()
}

function DisplayXSearch() {
document.write("<h3><a href=../>Back to home page</a></h3>")
templateEnd()
}

function search(keyword) {
var hit=0
var addcomplete=0

for (q=0; q<records.length; q++) {
addcomplete=0
search_parm=" "+records[q].searchstring()+" "
search_parm=search_parm.toLowerCase()

if (keyword.indexOf(' AND ')>0) {
firstword=keyword.substring(0,keyword.indexOf(' ')).toLowerCase()
lastword=keyword.substring(keyword.indexOf(' AND ')+5,keyword.length).toLowerCase()
if ((search_parm.indexOf(" "+firstword+" ") != -1) && (search_parm.indexOf(" "+lastword+" ")!= -1 )) {
hit++
finds++
if(hit<2) {
if (results[q].val==0) sites++
results[q].val +=2
}
}
} else {
keyword=keyword.toLowerCase()
if ((search_parm.indexOf(" "+keyword+" ") != -1) ||(keyword=="[all]")) {
hit++
finds++
if(hit<2) {
if (results[q].val==0) sites++
results[q].val+=2
}
} else {
// check for a half hit (ie. search:share find:SHAREware)
if (search_parm.indexOf(keyword) != -1) {
hit++
finds++
if(hit < 2) {
if (results[q].val==0) sites++
results[q].val+=1
x=search_parm.indexOf(keyword)+keyword.length
pos=search_parm.substring(1,x-keyword.length)
while (pos.indexOf(" ")!=-1) {
y=pos.indexOf(" ")
pos=pos.substring(y+1,pos.length)
}
if (pos.length<=2) addcomplete++

pos=search_parm.substring(x,search_parm.length)
fullresult=search_parm.substring(x,x+pos.indexOf(" "))

if (fullresult.length<=2) addcomplete++
if (addcomplete>1) results[q].val+=1
}
}
}
}
hit=0
}
}

var searchwords = ''
var newload = true

function initXsearch() {
if (searchwords!='') searchAll(searchwords)
else if (newload) Cat()
}

function tparams(){
parameters=document.location.search
parameters=unescape(parameters.substring(1,paramet ers.length)+'&')

this.params=new Array()
i=0
while (parameters.indexOf('&',0)!=-1) {
al=this.params.length
this.params[al]=new Array()

tmp=parameters.substring(0,parameters.indexOf('&',0))
parameters=parameters.substring(parameters.indexOf ('&',0)+1)

if (tmp.indexOf('=')!=-1) {
this.params[al].command=tmp.substring(0,tmp.indexOf('='))
this.params[al].value=tmp.substring(tmp.indexOf('=')+1)
} else {
this.params[al].command=tmp
this.params[al].value=''
}
}

return this
}
tparams.prototype.getValue=function(param){
value=''
param=param.toLowerCase()
al=this.params.length
for (var i=0; i<al; i+=1) if (this.params[i].command==param) value=this.params[i].value
return value
}

params=new tparams()
if (params.getValue('keywords')!=''){
searchwords=params.getValue('keywords')
origsearchwords=searchwords
while (searchwords.indexOf('+')>-1) {
pos=searchwords.indexOf('+')
searchwords=searchwords.substring(0,pos)+' '+searchwords.substring(pos+1)
}
}
if (params.getValue('sort')!='')
if (params.getValue('sort')=='0' || params.getValue('sort')=='false') SortResults=false
else SortResults=true
if (params.getValue('and')!='')
if (params.getValue('and')=='0' || params.getValue('and')=='false') andresult=false
else andresult=true
if (params.getValue('disp')!='') display_start=parseInt(params.getValue('disp'))

d) xsearch.css

body { background-color: rgb(255,255,255);}
a:link {color: rgb(0,0,102)}
a:visited {color: rgb(153,102,153)}
a:hover {color: rgb(255,0,0)}
a:active {color: rgb(0,0,102)}

h1 { font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 1.0em; font-weight: bold; text-align: center; color: rgb(0,0,0);}
h3 { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 0.8em; font-weight: normal; text-align: center; color:rgb(119,119,119)}
p { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 0.75em; }
li { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 0.8em; }
.xtitle { font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 0.95em; font-weight: normal;}
.xresult { font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 0.75em; font-weight: normal; }
.xlocation { font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 0.75em; color:green; font-weight: normal;}
.xsmall { font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 0.75em; color:green; font-weight: normal; }

#centerarea {
margin: 0px auto 0px auto;
width: 70%;
}

e) db.js
/* Search version 6.0 - Database file */

/* configuration settings */

searchname = 'search.htm'

usebannercode=false
ButtonCode = "<img src='searchbutton.gif' border=0>"

function templateBody() {
document.write('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><title>Search Results</title><'+
'script language="Javascript">'+
'<'+'/'+'script'+'></head><body><div id="centerarea">');
}

function templateEnd() {
document.write('</div></body></html>');
}
function bannerCode() {
}

/* end configuration settings */

/* database records */

add("<a href='../index.html>Add your page TITLE here</a>", "This is example website. Change all text own ... exact requirements.", "This is an example website. Change all the text to your own ")
add("<a href='../index1.html>title</a>", "blabla.","")
add("<a href='../index2.html'>title</a>", "blabla","")
add("<a href='../index3.html'>title</a>", "blabla","")
add("<a href='../index4.html'>title</a>", "blabla","")


db.js, reprezinta baza de date pentru site , iar continutul unei pagini (index.html) se creeaza prin copy/paste la cuvintele din pagina...

Spor la butonat!