Search term highlighting on my site

Keith posted about his efforts to highlight Google search terms. This is interesting! I may be able to create a b2-prefunction that does the same for b2++.
Update! I modified my original highlightsearch() function, adding in most of the code found on textism.org which also fixes the problem of highlighting text inside html links! Woo!
Here’s a Google search for you to try. Hit the Holy Shmoly link to see the highlighted text!
Again, if you want to add this to your own blog, just edit post.tpl add add the highlightsearch modifier around $the_content:

{$the_content|highlightsearch}

You’ll then have access to lots of highlighted search results!

new b2 snapshot

I released a new b2 snapshot today. This is the first release I’ve testing in Windows. By default Apache on Windows doesn’t enable mod_rewrite so I added code to catch when that happens.
Here’s the b2 discussion board I announced the new release on.
Download the new snapshot. You should probably download both the src and data packages as there are a number of template fixes too.

b2 Search Highlight Modifier

There’s a nice generalised text highlighter on the Smarty Plugins Wiki page so I modified it slightly to highlight b2 searches! Here’s a search for smarty that shows off this new plugin.
How do you use it? Modify your post.tpl and add the modifier to the_content variable like this:

{$the_content|highlightsearch}

If you want different colours try this:

{$the_content|highlightsearch:”<b style=’color: #000; background-color: #f00;’>”:”</b>”}

Text inside html links is also modified so links may be broken. Is there an easy way around that?
Here’s the code for the modifier. Just place it into a file called “modifier.highlightsearch.php” in your plugins directory!

<?php
/*
* Smarty plugin
* -------------------------------------------------------------
* Type: modifier
* Name: highlight
* Version: 0.5
* Date: 2003-03-27
* Author: Pavel Prishivalko, aloner#telephone.ru
* Purpose: Highlight search term in text
* Install: Drop into the plugin directory
*
* Extended To 0.5 By: Alexey Kulikov
* Strips Tags for nice output, allows multiple term for highlight
* Modified and simplified to high light b2 searches by Donncha O Caoimh
* -------------------------------------------------------------
*/
function smarty_modifier_highlightsearch($text, $start_tag='<b style="color: #000; background-color: #ff0;">', $end_tag='</b>')
{
   global $s;
   if( $s != '' )
   {
     $term = $s;
     $term = preg_quote($term);

     return preg_replace('/('.$term.')/i', $start_tag.'$1'.$end_tag, $text);
   }
   else
   {
     return $text;
   }
}

?>

A year ago today

I added the “A Year Ago Today” Plugin to the site. Use it by adding the following Smarty tag to your site template (ie. in index.tpl)

{todayayearago heading='<h1>A Year Ago</h1>’}

There are a number of differences between this plugin and the original:

  1. The “heading” part is the heading displayed if there are any posts, otherwise nothing is displayed.
  2. If no title exists for the old entry, then an extract of the old entry is printed.
  3. I fixed a bug with the $siteurl variable.

Unfortunately, there were no posts on 2002-04-25, but there were on 2002-04-26 so you’ll see them pop up tomorrow!

b2 plugin support

On the b2 forums there are plenty of hacks and enhancements to b2. While there are guidelines to writing hacks they’re informal, and many hacks rely on changing existing code.
I’m using the Smarty plugins support to provide a consistent and documented way of writing plugins.
I created a simple “googleit” function already. It’s integrated into the post.tpl template of this blog and provides the “Search” link you see below.
Using Smarty plugins is easy. You create your function, call it a predictable name (smarty_function_name() where name is “googleit” for example), put it into a file and drop that file into the plugins directory.

The usual advantage of using Smarty caching applies here too. Once it’s cached the plugin isn’t loaded again until it’s called so you can drop as many plugins as you like into the plugin directory without suffering any speed loss!