WikimediaSearch
Questions answered by this recipe
How to get a search form like seen on wikipedia pages, which means:
- Using one text input field for both searching and going directly to a wikipage
- Going to the default search page if nothing was entered
- Getting even a much more functional form by using a little javascript
Description
Simple wikipedia like
Replace the existing search form in your template with this form (you might want to change the labels, ...):
<form action='{$ScriptUrl}'>
<label for="q">Searching:</label>
<input type="text" class="text" name="q" id="q" />
<input type='hidden' name='n' value='{$FullName}' />
<input type='hidden' name='action' value='gosearch' />
<input type="submit" class="button" name="gotype" value="go" />
<input type="submit" class="button" name="gotype" value="search" />
</form>
And this tiny code of PHP in a recipie or your local config file:
if($action == 'gosearch') {
if($_GET['gotype'] == 'go') {
header("Location: ${ScriptUrl}?n=$_GET[q]"); exit; }
else $action = 'search';
}
You're done - this will work exactly like the wikipedia implementation with a minimum of effort.
The advanced javascript way
This is just a little extension to the static solution. Simply replace the search form in your template file with this tiny code:
<form action='{$ScriptUrl}'>
<input type="text" class="text" name="q" id="q" value="Search" onFocus="if(this.value=='Search')this.value='';"
onBlur="if(this.value=='')this.value='Search';" />
<input type='hidden' name='n' value='{$FullName}' />
<input type='hidden' name='action' value='gosearch' />
<input type="submit" class="button" name="gotype" value="go" />
<input type="submit" class="button" name="gotype" value="search" />
</form>
and this will replace the PHP code shown above:
if($action == 'gosearch') {
# if the user only hit a button without entering an own search term,
# we'll refer him to the default search page of the PmWiki installation
# which will give him further instructions
if($_GET['q'] == 'Search' || empty($_GET['q'])) {
$_GET['gotype'] = 'go; $_GET['q'] = 'PmWiki.Search'; }
# go to the article with the name...
if($_GET['gotype'] == 'go') {
header("Location: ${ScriptUrl}?n=$_GET[q]"); exit; }
# perform a real search
else $action = 'search';
}
You might notice that the default page shown by PmWiki if a page doesn't exist is not very verbose, compared to the page shown by wikimedia. Site.PageNotFound is your friend - I've written this page from the scratch, giving the reader a possibility to create the article, check the group or perform a full text search.
Notes
Release Notes
See Also
Contributors
- Sven K.
Comments
User notes : If you use, used or reviewed this recipe, you can add your name. These statistics appear in the Cookbook listings and will help newcomers browsing through the wiki.