Gossamer Forum
Home : Products : Gossamer Links : Development, Plugins and Globals :

Suggest query (as in Google Suggest)

(Page 2 of 3)
> > > >
Quote Reply
Re: [katabd] Suggest query (as in Google Suggest) In reply to
The solution is very easy..

In the livesearch.html page

In the Body tags area..

Change this:

<script language="JavaScript" src="livesearch.js" type="text/javascript"></script>

To:

<script language="JavaScript" src="URL/livesearch.js" type="text/javascript"></script>

See it in action..
http://2muslims.com/livesearch.shtml
Regards
KaTaBd

Users plug In - Multi Search And Remote Search plug in - WebRing plug in - Muslims Directory
Quote Reply
Re: [katabd] Suggest query (as in Google Suggest) In reply to
Another cool thing we did..I think Crazy
We removed the <body> loading command and that will dispaly the suggestions as part of the page..
Regards
KaTaBd

Users plug In - Multi Search And Remote Search plug in - WebRing plug in - Muslims Directory
Quote Reply
Re: [katabd] Suggest query (as in Google Suggest) In reply to
What differnec does it make:

http://2muslims.com/livesearch.shtml works great

http://www.2muslims.com/livesearch.shtml does not..

The rest of the site works fine...any ideas?
Regards
KaTaBd

Users plug In - Multi Search And Remote Search plug in - WebRing plug in - Muslims Directory
Quote Reply
Re: [katabd] Suggest query (as in Google Suggest) In reply to
It has to be something in the js file..

In this section (Now):

liveSearchReq.onreadystatechange= liveSearchProcessReqChange;
liveSearchReq.open("GET", "http://2muslims.com/...livesearch.cgi?query=" + document.forms.searchform.query.value + liveSearchParams);
liveSearchLast = document.forms.searchform.query.value;
liveSearchReq.send(null);
}

If I change it to:
liveSearchReq.onreadystatechange= liveSearchProcessReqChange;
liveSearchReq.open("GET", "http://www.2muslims.com/...livesearch.cgi?query=" + document.forms.searchform.query.value + liveSearchParams);
liveSearchLast = document.forms.searchform.query.value;
liveSearchReq.send(null);
}

http://www.2muslims.com/livesearch.shtml works great

http://2muslims.com/livesearch.shtml does not..

Does anyone know how to fix it?
Regards
KaTaBd

Users plug In - Multi Search And Remote Search plug in - WebRing plug in - Muslims Directory
Quote Reply
Re: [katabd] Suggest query (as in Google Suggest) In reply to
I got it working here

http://www.mychristianweb.com/...live/livesearch.html

In addition to the change yogi mentioned above I had to make these other changes;
Changed the path to my link admin dir as well as the path URL to the LSQL search in the cgi file.

In the html the relative path to search.cgi was changed and links to the javascript and the css files were changed to match location on my site.

CCUnet
my Christian web
Quote Reply
Re: [ccunet] Suggest query (as in Google Suggest) In reply to
It works on my ite too.

BUT that www bug irritates me.
Regards
KaTaBd

Users plug In - Multi Search And Remote Search plug in - WebRing plug in - Muslims Directory
Quote Reply
Re: [katabd] Suggest query (as in Google Suggest) In reply to
 I've been trying for quite some time but I still can't get it to work after following what everyone else has been doing?

Here's my livesearch.html file:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/...ml1-transitional.dtd">
<html>
<head>
<title>OhioBiz LiveSearch</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<link href="livesearch.css" rel="stylesheet" media="screen" type="text/css" />
<script language="JavaScript" src="livesearch.js" type="text/javascript"></script>
</head>
<body onload="liveSearchInit()">
<h1>OhioBiz LiveSearch</h1>
<p>
Type the first few letters of your search query and see what happens...
</p>
<form name="searchform" method="get" action="/cgi-bin/search.cgi" onsubmit="return liveSearchSubmit()" >
<input type="text" id="livesearch" name="query" onkeypress="liveSearchStart()" size="25" />
<div id="LSResult" style="display: none;"><div id="LSShadow"></div></div>
</form>
<p>
The <a href="http://blog4.bitflux.ch/wiki/LiveSearch">LiveSearch</a> feature was
originally written by <a href="http://www.bitflux.ch/">bitflux</a> and adapted
to Links SQL by Ivan Herger.
</p>

</body>
</html>


Here's my livesearch.cgi file:

#!/usr/bin/perl

# +----------------------------------------------------------------------+
# | Copyright (c) 2004 Iyengar Yoga Resources |
# +----------------------------------------------------------------------+
# | Licensed under the Apache License, Version 2.0 (the "License"); |
# | you may not use this file except in compliance with the License. |
# | You may obtain a copy of the License at |
# | http://www.apache.org/licenses/LICENSE-2.0 |
# | Unless required by applicable law or agreed to in writing, software |
# | distributed under the License is distributed on an "AS IS" BASIS, |
# | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or |
# | implied. See the License for the specific language governing |
# | permissions and limitations under the License. |
# +----------------------------------------------------------------------+
# | Author: yogi <info@iyengar-yoga.com> |
# +----------------------------------------------------------------------+
use strict;
use lib '/home/ohiobiz/public_html/dir/cgi-bin/admin';
use Links qw/$CFG $DB $IN/;
local $SIG{__DIE__} = \&Links::fatal;
Links::init('/home/ohiobiz/public_html/dir/cgi-bin/admin');

main();
sub main {
my $t = $DB->table('links2SearchLogs');
$t->select_options('ORDER by HitCount DESC', 'LIMIT 10');
my $q = $IN->param('query');
my $cond = GT::SQL::Condition->new( 'Term', 'LIKE', "$q%");
my $sth = $t->select($cond);
my $base ='http://dir.ohiobiz.com/cgi-bin/search.cgi?query';
print "Content-Type: text/xml\n\n";
if ($t->hits) {
print qq|<ul class="LSRes">|;
while (my $result = $sth->fetchrow_hashref) {
print qq|<li class="LSRow" onmouseover="liveSearchHover(this)" onclick="liveSearchClicked(this)"><a href="$base=$result->{Term}" name="$result->{Term}">$result->{Term}</a> <span style="color:green;overflow:hidden;">$result->{Results} results</span></li>\n|;
}
print qq|</ul>|;
}
}


Here's my livesearch.js file:

/*
// +----------------------------------------------------------------------+
// | Copyright (c) 2004 Bitflux GmbH |
// +----------------------------------------------------------------------+
// | Licensed under the Apache License, Version 2.0 (the "License"); |
// | you may not use this file except in compliance with the License. |
// | You may obtain a copy of the License at |
// | http://www.apache.org/licenses/LICENSE-2.0 |
// | Unless required by applicable law or agreed to in writing, software |
// | distributed under the License is distributed on an "AS IS" BASIS, |
// | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or |
// | implied. See the License for the specific language governing |
// | permissions and limitations under the License. |
// +----------------------------------------------------------------------+
// | Author: Bitflux GmbH <devel@bitflux.ch> |
// | Modified for use with Links SQL: Ivan Herger <info@iyengar-yoga.com> |
// +----------------------------------------------------------------------+
*/
var liveSearchReq = false;
var t = null;
var liveSearchLast = "";

var isIE = false;
// on !IE we only have to initialize it once
if (window.XMLHttpRequest) {
liveSearchReq = new XMLHttpRequest();
}
function liveSearchInit() {

if (navigator.userAgent.indexOf("Safari") > 0) {
document.getElementById('livesearch').addEventListener("keydown",liveSearchKeyPress,false);
// document.getElementById('livesearch').addEventListener("blur",liveSearchHide,false);
} else if (navigator.product == "Gecko") {

document.getElementById('livesearch').addEventListener("keypress",liveSearchKeyPress,false);
document.getElementById('livesearch').addEventListener("blur",liveSearchHideDelayed,false);

} else {
document.getElementById('livesearch').attachEvent('onkeydown',liveSearchKeyPress);
// document.getElementById('livesearch').attachEvent("onblur",liveSearchHide,false);
isIE = true;
}

document.getElementById('livesearch').setAttribute("autocomplete","off");
}
function liveSearchHideDelayed() {
window.setTimeout("liveSearchHide()",400);
}

function liveSearchHide() {
document.getElementById("LSResult").style.display = "none";
var highlight = document.getElementById("LSHighlight");
if (highlight) {
highlight.removeAttribute("id");
}
}
function liveSearchKeyPress(event) {

if (event.keyCode == 40 )
//KEY DOWN
{
highlight = document.getElementById("LSHighlight");
if (!highlight) {
highlight = document.getElementById("LSShadow").firstChild.firstChild;
} else {
highlight.removeAttribute("id");
highlight = highlight.nextSibling;
}
if (highlight) {
highlight.setAttribute("id","LSHighlight");
var queryName = highlight.firstChild.getAttribute("name")
liveSearchLast = queryName;
document.forms.searchform.query.value = queryName;
}
if (!isIE) { event.preventDefault(); }
}
//KEY UP
else if (event.keyCode == 38 ) {
highlight = document.getElementById("LSHighlight");
if (!highlight) {
highlight = document.getElementById("LSResult").firstChild.firstChild.lastChild;
}
else {
highlight.removeAttribute("id");
highlight = highlight.previousSibling;
}
if (highlight) {
highlight.setAttribute("id","LSHighlight");
var queryName = highlight.firstChild.getAttribute("name")
liveSearchLast = queryName;
document.forms.searchform.query.value = queryName;
}
if (!isIE) { event.preventDefault(); }
}
//ESC
else if (event.keyCode == 27) {
highlight = document.getElementById("LSHighlight");
if (highlight) {
highlight.removeAttribute("id");
}
document.getElementById("LSResult").style.display = "none";
}
}
function liveSearchStart() {
if (t) {
window.clearTimeout(t);
}
t = window.setTimeout("liveSearchDoSearch()",200);
}
function liveSearchDoSearch() {
if (typeof liveSearchRoot == "undefined") {
liveSearchRoot = "";
}
if (typeof liveSearchRootSubDir == "undefined") {
liveSearchRootSubDir = "";
}
if (typeof liveSearchParams == "undefined") {
liveSearchParams = "";
}
if (liveSearchLast != document.forms.searchform.query.value) {
if (liveSearchReq && liveSearchReq.readyState < 4) {
liveSearchReq.abort();
}
if ( document.forms.searchform.query.value == "") {
liveSearchHide();
return false;
}
if (window.XMLHttpRequest) {
// branch for IE/Windows ActiveX version
} else if (window.ActiveXObject) {
liveSearchReq = new ActiveXObject("Microsoft.XMLHTTP");
}
liveSearchReq.onreadystatechange= liveSearchProcessReqChange;
liveSearchReq.open("GET", "http://dir.ohiobiz.com/...livesearch.cgi?query=" + document.forms.searchform.query.value + liveSearchParams);
liveSearchLast = document.forms.searchform.query.value;
liveSearchReq.send(null);
}
}
function liveSearchProcessReqChange() {

if (liveSearchReq.readyState == 4) {
var res = document.getElementById("LSResult");
res.style.display = "block";
var sh = document.getElementById("LSShadow");

sh.innerHTML = liveSearchReq.responseText;

}
}
function liveSearchSubmit() {
var highlight = document.getElementById("LSHighlight");
if (highlight && highlight.firstChild) {
window.location = liveSearchRoot + liveSearchRootSubDir + highlight.firstChild.getAttribute("href");
return false;
}
else {
return true;
}
}

function liveSearchHover(el) {
highlight = document.getElementById("LSHighlight");
if (highlight) {
highlight.removeAttribute("id");
}
el.setAttribute("id","LSHighlight");
document.searchform.query.focus();
}
function liveSearchClicked(el) {
highlight = document.getElementById("LSHighlight");
if (highlight) {
highlight.removeAttribute("id");
}
el.setAttribute("id","LSHighlight");
return liveSearchSubmit();
}



So, I not sure why nothing showing up in the search box. Any ideas? permission issues?

Thanks for anyone's advice.

mgeyman
Quote Reply
Re: [mgeyman] Suggest query (as in Google Suggest) In reply to
Change this line:

<script language="JavaScript" src="livesearch.js" type="text/javascript"></script>

to the full URL of the js file:
<script language="JavaScript" src="yourdomain.com/livesearch.js" type="text/javascript"></script>
Regards
KaTaBd

Users plug In - Multi Search And Remote Search plug in - WebRing plug in - Muslims Directory
Quote Reply
Re: [katabd] Suggest query (as in Google Suggest) In reply to
katabd,

I made the update in livesearch.html and now get an Unknown runtime error message after I start typing characters into the search box - see http://dir.ohiobiz.com/livesearch.html.

mgeyman
Quote Reply
Re: [mgeyman] Suggest query (as in Google Suggest) In reply to
Hi,

A few observances.

I copied the files from the original post, and got them to run, no real problems.

1) make sure you upload livesearch.cgi in ASCII, *and* you give it 755 execute permissions in Unix.

2) make sure all the &amp; tag (in front of the $SIG{__DIE__} = \&Links::fatal line) is just an "&" and that all the &lt; and &gt; tags are converted back to their ansi <> forms.

3) make sure you change the paths to your livesearch.cgi and search.cgi in the livesearch.js and livesearch.htm files There are 3 paths (two init paths lib & Links::init) and then the $base lower down. There is one path in the livesearch.js file.

4) if you have your extensions set to .html you need to change the livesearch.htm to livesearch.html before uploading it to the templates directory.

I did that, and called ../page.cgi?livesearch;d=1 and it worked just fine :) in GLinks3

Also, if you are using the *new* version of the search logger, built in to Links, you must rename the "SearchLog" file, to "SearchLogs" in the .js file.

If you are still using the original, or my avanced/improved logger, you can leave it as SearchLog


PUGDOG� Enterprises, Inc.

The best way to contact me is to NOT use Email.
Please leave a PM here.

Last edited by:

pugdog: Apr 27, 2005, 2:27 PM
Quote Reply
Re: [pugdog] Suggest query (as in Google Suggest) In reply to
pugdog,

Thanks for the info. I did what you just said. What I'm getting now when I attempt to type a phrase in the search box is a javascript error:

Line: 121
Char: 2
Error: 'document.forms.searchform.q.value' is null or not an object
Code: 0
URL: http://www.ohiobiz.com/livesearch.html

Seems like the problem is in the livesearch.js file???
Quote Reply
Re: [mgeyman] Suggest query (as in Google Suggest) In reply to
I edited the post above, there are 3 paths, in the .cgi and 1 in the .js file.

Are you sure you have the right .js file? That line doesn't match up in my file.

I've attached the modified one here. Just change the path with "beadblogger" to your path and see if it works.

BTW: make sure you upload this file as _ASCII_ or text, not binary.


PUGDOG� Enterprises, Inc.

The best way to contact me is to NOT use Email.
Please leave a PM here.

Last edited by:

pugdog: Apr 27, 2005, 2:32 PM
Quote Reply
Re: [pugdog] Suggest query (as in Google Suggest) In reply to
Hey pugdog! Thanks so much for your help, I finally got it working - http://www.ohiobiz.com/livesearch.html

Just one final question, when you type in letters in the search box where there are no search results in the db, why is there a dark gray horizontal bar left on the screen (to the right of the search box)? Is there a way to make that disappear without having to either refresh the page or type in new letters?

Again, thanks for your and everyone else's help!

mgeyman
Quote Reply
Re: [mgeyman] Suggest query (as in Google Suggest) In reply to
pugdog,

One other thing I noticed - I am using both the new built-in SearchLogger glinks (3.0.1) and the old one - using it for Top 100 Searches.

The Sugggest query work fine when pulling results from "SearchLog" but doesn't work when trying to pull results from "SearchLogs" (built in SearchLogger). Do I need to uninstall the old plug-in for the Suggest query to be able to pull results from the new built-in one?

mgeyman
Quote Reply
Re: [mgeyman] Suggest query (as in Google Suggest) In reply to
No,

They can be run side by side with only a few cpu cycles penalty for the xtra code. They don't interfere with each other at all, now, the GL3 uses a new table SearchLogs.

To pull queries from the new built in one, change the table name in the livesearch.cgi from SearchLog to SearchLogs




PUGDOG� Enterprises, Inc.

The best way to contact me is to NOT use Email.
Please leave a PM here.
Quote Reply
Re: [mgeyman] Suggest query (as in Google Suggest) In reply to
Quote:
Just one final question, when you type in letters in the search box where there are no search results in the db, why is there a dark gray horizontal bar left on the screen (to the right of the search box)? Is there a way to make that disappear without having to either refresh the page or type in new letters?


Haven't figured that out, but it also doesn't go away, as pointed out before.

I'm not real good with javascript, but I can figure out enough to make it work. It probably needs a test to only initially display the box when a result is returned.

Someone who knows javascript will have to answer this one :)


PUGDOG� Enterprises, Inc.

The best way to contact me is to NOT use Email.
Please leave a PM here.
Quote Reply
Re: [pugdog] Suggest query (as in Google Suggest) In reply to
--To pull queries from the new built in one, change the table name in the livesearch.cgi from SearchLog to SearchLogs

pugdog,

I tried this but I didn't get any visible suggestion results with "SearchLogs" - Strange!

mgeyman
Quote Reply
Re: [mgeyman] Suggest query (as in Google Suggest) In reply to
You also have to change

my $cond = GT::SQL::Condition->new( 'Term', 'LIKE', "$q%");


to slog_query :( there were internal changes to the database structure.


PUGDOG� Enterprises, Inc.

The best way to contact me is to NOT use Email.
Please leave a PM here.
Quote Reply
Re: [pugdog] Suggest query (as in Google Suggest) In reply to
Hmmm. I changed "Term" to "slog_query" and "SearchLog" to "SearchLogs" but I get this error when attempting to do a search:
    Content-type: text/html
    A fatal error has occured:
    Can't call method "fetchrow_hashref" on an undefined value at livesearch.cgi line 23.

    Please enable debugging in setup for more details.

Quote Reply
Re: [mgeyman] Suggest query (as in Google Suggest) In reply to
In Reply To:
Hmmm. I changed "Term" to "slog_query" and "SearchLog" to "SearchLogs" but I get this error when attempting to do a search:
    Content-type: text/html
    A fatal error has occured:
    Can't call method "fetchrow_hashref" on an undefined value at livesearch.cgi line 23.

    Please enable debugging in setup for more details.

I get this error too. I have been unable to make this work in 3.01. At best I get a solid gray box...apparently it can't access the search logs so it gets no results but is otherwise working.
Quote Reply
Re: [fantasyman] Suggest query (as in Google Suggest) In reply to
Have you enabled search logging at all? It's disabled in the default setup.
Quote Reply
Re: [fantasyman] Suggest query (as in Google Suggest) In reply to
Unfortunately, rather than handling a null/empty value in a select, the whole routine just dies. The way around it is to check for returned results first, but there are a few instances where even that doesn't work.

But make sure you have some search queries in the database, and that everything is entered correctly.

I'll try to modify my copy here, and see if it's some other issue blocking this.


PUGDOG� Enterprises, Inc.

The best way to contact me is to NOT use Email.
Please leave a PM here.
Quote Reply
Re: [gotze] Suggest query (as in Google Suggest) In reply to
Yeah, its enabled and I can view the search logs just fine from the admin menu.
Quote Reply
Re: [fantasyman] Suggest query (as in Google Suggest) In reply to
Same here. I can see the search results from the built in searchlogger from the admin area.
Quote Reply
Re: [mgeyman] Suggest query (as in Google Suggest) In reply to
This is one of those silent 500 errors...

Code:

$t->select_options('ORDER by HitCount DESC', 'LIMIT 10');


The column "HitCount" doesn't exist. Needs to be slog_hits

I haven't run this, but just looking at the code, it's an error I've banged my head on before.


PUGDOG� Enterprises, Inc.

The best way to contact me is to NOT use Email.
Please leave a PM here.
> > > >