I coded up a page search for v1.0.4:
Here are the modifications to files:
# added: rs to English.pl
$txt{'98'} = 'Search'; # in the header - to search site pages.
$txt{'99'} = 'Search for:'; # on the search page
$txt{'100'} = 'Search > >'; # on the search submit button
$txt{'101'} = ''; # default text for search
$txt{'102'} = 'Search Results for'; # search results page.
$txt{'103'} = 'You did not enter anything to search on!'; # search error.
$txt{'104'} = 'No results found.'; # no results found
# IN PageTemplate.pl
#rs new sub
sub print_SearchForm() {
print qq~<h1></h1><p>
<form name="sf" method="get" action="$WikiURL?action=startsearch">
<input type="hidden" name="action" value="startsearch">
$txt{'99'} <input type="text" name="searchstring" size="40" value="$txt{'101'}">
</form>
<br><br><input type="button" value="$txt{'100'}" onClick="javascript:document.sf.submit()" />
</p>~;
}
#rs new sub
sub print_SearchResults() {
my $string = shift; # search string
$string =~ s/\<.*?\>//g; # Simple HTML flusher
$string =~ tr/A-Z/a-z/; # Case insensitive
$string =~ s/[^a-z0-9]/ /g; # If it's not a legal character make it whitespace
$string =~ s/^\s*([\s\S]*\S+)\s*$/$1/g; # Remove any leading and trailing spaces.
my $ns = "site";
my $span=20;
my $count=0;
my ($pagedata,$wd,$pos,$p1,$p2,$substr);
my @words = split(' ', $string);
if((@words)==0){ # check for error
print qq~<h3>$txt{'103'}</h3>~;
return; # abort.
}
print qq~<h1>$txt{'102'}: <i>$string</i></h1><ul>~;
my @pageslist = &db_GetIndexOfPages($ns);
foreach $page (@pageslist){
&db_load_PageData($page); # initialize.
$pagedata = &db_get_PageData($page, 'article/content');
$substr="";
foreach $wd (@words){
$pos = index($pagedata,$wd);
if($pos >= 0){
$p1 = ($pos-$span)>0?($pos-$span):0;
$p2 = ($pos+$span)<length($pagedata)?($pos+$span):length($pagedata);
#print "$p1, $p2 ";
$substr .= " ..." . substr($pagedata,$p1,$p2-$p1) . "... ";
$substr =~ s/($wd)/<font color='red'>$1<\/font>/g;
$count++;
}
}
if($substr ne ""){
print qq~<li><a href="$WikiURL?page=$ns:$page">$page</a><br><i>$substr</i></li><br>~;
}
}
print qq~</ul>~;
if($count==0){ print qq~<h4>$txt{'104'}</h4>~; }
}
# IN PageTemplate.pl
sub print_PageHeader() {
my $title = shift;
$title =~ tr/_#/ \//;
# Prints header
my $mainpg = &decodeWikiWord($MainPage);
print qq~<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>$SiteName - $title</title><link type="text/css" rel="stylesheet" href="$ResourcesURL/wiki.css"></head><body>
<a href="$WikiURL"><img class="mainlogo" src="$ResourcesURL/defaultlogo.png" alt="$SiteName" border="0"></a>
I coded up a page search for v1.0.4:
Here are the modifications to files:
# added: rs to English.pl
$txt{'98'} = 'Search'; # in the header - to search site pages.
$txt{'99'} = 'Search for:'; # on the search page
$txt{'100'} = 'Search > >'; # on the search submit button
$txt{'101'} = ''; # default text for search
$txt{'102'} = 'Search Results for'; # search results page.
$txt{'103'} = 'You did not enter anything to search on!'; # search error.
$txt{'104'} = 'No results found.'; # no results found
# IN PageTemplate.pl
#rs new sub
sub print_SearchForm() {
print qq~<h1></h1><p>
<form name="sf" method="get" action="$WikiURL?action=startsearch">
<input type="hidden" name="action" value="startsearch">
$txt{'99'} <input type="text" name="searchstring" size="40" value="$txt{'101'}">
</form>
<br><br><input type="button" value="$txt{'100'}" onClick="javascript:document.sf.submit()" />
</p>~;
}
#rs new sub
sub print_SearchResults() {
my $string = shift; # search string
$string =~ s/\<.*?\>//g; # Simple HTML flusher
$string =~ tr/A-Z/a-z/; # Case insensitive
$string =~ s/[^a-z0-9]/ /g; # If it's not a legal character make it whitespace
$string =~ s/^\s*([\s\S]*\S+)\s*$/$1/g; # Remove any leading and trailing spaces.
my $ns = "site";
my $span=20;
my $count=0;
my ($pagedata,$wd,$pos,$p1,$p2,$substr);
my @words = split(' ', $string);
if((@words)==0){ # check for error
print qq~<h3>$txt{'103'}</h3>~;
return; # abort.
}
print qq~<h1>$txt{'102'}: <i>$string</i></h1><ul>~;
my @pageslist = &db_GetIndexOfPages($ns);
foreach $page (@pageslist){
&db_load_PageData($page); # initialize.
$pagedata = &db_get_PageData($page, 'article/content');
$substr="";
foreach $wd (@words){
$pos = index($pagedata,$wd);
if($pos >= 0){
$p1 = ($pos-$span)>0?($pos-$span):0;
$p2 = ($pos+$span)<length($pagedata)?($pos+$span):length($pagedata);
#print "$p1, $p2 ";
$substr .= " ..." . substr($pagedata,$p1,$p2-$p1) . "... ";
$substr =~ s/($wd)/<font color='red'>$1<\/font>/g;
$count++;
}
}
if($substr ne ""){
print qq~<li><a href="$WikiURL?page=$ns:$page">$page</a><br><i>$substr</i></li><br>~;
}
}
print qq~</ul>~;
if($count==0){ print qq~<h4>$txt{'104'}</h4>~; }
}
# IN PageTemplate.pl
sub print_PageHeader() {
my $title = shift;
$title =~ tr/_#/ \//;
# Prints header
my $mainpg = &decodeWikiWord($MainPage);
print qq~<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>$SiteName - $title</title><link type="text/css" rel="stylesheet" href="$ResourcesURL/wiki.css"></head><body>
<a href="$WikiURL"><img class="mainlogo" src="$ResourcesURL/defaultlogo.png" alt="$SiteName" border="0"></a>
# rs changed...3rd link action=search
<div class="menu"><a href="$WikiURL">$mainpg</a>|<a href="$WikiURL?action=nsindex">$txt{'2'}</a>|<a href="$WikiURL?action=search">$txt{'98'}</a>|<a href="$WikiURL/$RecentChangesPageName">$txt{'78'}</a>|<a href="$WikiURL?action=new">$txt{'88'}</a>~;
[snip]
In mxwiki.pl
} elsif ($form{'action'} eq 'new'){
print_PageHeader();
&print_NewPageForm();
print_PageFooter();
# rs added following prior to default else...
} elsif ($form{'action'} eq 'search'){
print_PageHeader();
&print_SearchForm();
print_PageFooter();
} elsif ($form{'action'} eq 'startsearch'){
print_PageHeader();
&print_SearchResults($form{'searchstring'});
print_PageFooter();
Thanks
--Rick