google plugin: Use google.com to search the local site.

Google allows has a nice feature, sitesearch, that allows anyone to
limit search results to a specific site. Obviously, this feature can be
used to provide a search engine for the local ikiwiki site without the
need to install any additional software. Just enable the 'google' plugin
and make sure that --url uses the proper hostname. Thanks to Joey for
helping to get the Perl implementation right.
master
Peter Simons 2008-10-10 00:13:19 +02:00 committed by Joey Hess
parent 61b37a3d73
commit f9957d11ed
2 changed files with 55 additions and 0 deletions

View File

@ -0,0 +1,49 @@
#!/usr/bin/perl
package IkiWiki::Plugin::google;
use warnings;
use strict;
use IkiWiki 2.00;
use URI;
sub import { #{{{
hook(type => "getsetup", id => "google", call => \&getsetup);
hook(type => "checkconfig", id => "google", call => \&checkconfig);
hook(type => "pagetemplate", id => "google", call => \&pagetemplate);
} # }}}
sub getsetup () { #{{{
return
plugin => {
safe => 1,
rebuild => 1,
},
} #}}}
sub checkconfig () { #{{{
foreach my $required (qw(url)) {
if (! length $config{$required}) {
error(sprintf(gettext("Must specify %s when using the google search plugin"), $required));
}
}
} #}}}
my $form;
sub pagetemplate (@) { #{{{
my %params=@_;
my $page=$params{page};
my $template=$params{template};
# Add search box to page header.
if ($template->query(name => "searchform")) {
if (! defined $form) {
my $searchform = template("googleform.tmpl", blind_cache => 1);
$searchform->param(sitefqdn => URI->new($config{url})->host);
$form=$searchform->output;
}
$template->param(searchform => $form);
}
} #}}}
1

View File

@ -0,0 +1,6 @@
<form method="get" action="http://www.google.com/search" id="searchform">
<div>
<input name="sitesearch" value="<TMPL_VAR SITEFQDN>" type="hidden">
<input name="q" value="" id="searchbox" size="16" maxlength="255" type="text">
</div>
</form>