=====HighlightSearch Handler===== >>==See also :== Documentation : ""HighlightSearchHandlerInfo"" Other: [[SearchHighlighter]], HighlightSearchWikka12, HighlightSearchWikka13 ==Works with :== Wikka 1.1.6.2 - 1.1.6.6>>//NOT included in any Wikka version// Handler also available for [[HighlightSearchWikka12 | Wikka 1.2 ]] and [[HighlightSearchWikka13 | Wikka 1.3]] This is the development page for the HighlightSearch handler. ::c:: RolandStens did [[SearchHighlighter]] based on Javascript. Here is my contribution in PHP. The work is based on show.php handler and a small part of textsearchexpanded.php action. You can see this new handler in action [[http://emeraldisland.free.fr/wikka/wikka.php?wakka=HighlightSearch/highlightsearch&search=highlight | here]]. ==Installation== - Save the code block below as ##handlers/page/highlightsearch.php## - Give it the same file permissions as the other php files in that directory ==Code== 1. New handlers/page/highlightsearch.php file %%(php)
GetUser()) && ($user['doubleclickedit'] == 'N')) ? '' : 'ondblclick="document.location=\''.$this->href('edit').'\';" ' ?>> HasAccess('read')) { echo '

You aren\'t allowed to read this page.

'; } else { if (!$this->page) { echo '

This page doesn\'t exist yet. Maybe you want to create it?

'; } else { if ($this->page['latest'] == 'N') { echo '
This is an old revision of '.$this->GetPageTag().' from '.$this->page['time'].'.
'; } if (isset($_REQUEST['search']) && ($search = $_REQUEST['search'])) { $search_re = stripslashes(trim($search)); if ($search_re) { // display page with highlighted string $txt_stripped = $this->Format($this->page['body'], 'wakka'); // The evil REGEXP $pattern = '/('.$this->htmlspecialchars_ent($search_re).')(?![^<]*?>)/i'; $highlightMatch = preg_replace($pattern,'<<$1>>',$txt_stripped,-1); $matchText = str_replace(array('<<', '>>'), array('', ''), $highlightMatch); echo $matchText; } } else { echo $this->Format($this->page['body'], 'wakka'); } // if this is an old revision, display some buttons if ($this->page['latest'] == 'N' && $this->HasAccess('write')) { // added if encapsulation : in case where some pages were brutally deleted from database if ($latest = $this->LoadPage($this->tag)) { ?>
FormOpen('edit') ?> FormClose(); ?> '."\n"; if ($this->GetConfigValue('hide_comments') != 1) { // load comments for this page $comments = $this->LoadComments($this->tag); // store comments display in session $tag = $this->GetPageTag(); if (!isset($_SESSION['show_comments'][$tag])) $_SESSION['show_comments'][$tag] = ($this->UserWantsComments() ? '1' : '0'); if (isset($_REQUEST['show_comments'])){ switch($_REQUEST['show_comments']) { case "0": $_SESSION['show_comments'][$tag] = 0; break; case "1": $_SESSION['show_comments'][$tag] = 1; break; } } // display comments! if ($_SESSION['show_comments'][$tag]) { // display comments header ?>
 Comments [Hide comments/form]
GetUserName(); foreach ($comments as $comment) { echo '
'."\n". ''.$comment['comment']."\n". "\t".'
'."\n-- "; echo ($this->LoadUser($comment['user']))? $this->Format($comment['user']) : $comment['user']; // #84 echo ' ('.$comment['time'].')'."\n"; $current_user = $this->GetUserName(); if ($this->UserIsOwner() || $current_user == $comment['user'] || ($this->config['anony_delete_own_comments'] && $current_user == $comment['user']) ) { echo $this->FormOpen("delcomment"); ?> FormClose(); } echo "\n\t".'
'."\n"; echo '
'."\n"; } } // display comment form echo '
'."\n"; if ($this->HasAccess('comment')) {?> FormOpen('addcomment'); ?> FormClose(); ?> '."\n"; } else { ?>
There are no comments on this page. '; $showcomments_text = 'Add comment'; break; case 1: echo '
There is one comment on this page. '; $showcomments_text = 'Display comment'; break; default: echo '
There are '.count($comments).' comments on this page. '; $showcomments_text = 'Display comments'; } ?> []
%% 2. In textsearch.php action, change only one line : Old textsearch.php source code (line 50) : %%(php)$result_page_list .= ($i+1).". ".$this->Link($page["tag"],"
\n";%% New textsearch.php source code (line 50) : %%(php)$result_page_list .= ($i+1).". ".$this->Link($page["tag"],'highlightsearch&search='.$phrase)."
\n";%% 3. That's all ! ==Remark :== For a better integration in your wiki, you can also replace 'show' handler. - rename or save handlers/page/show.php in handlers/page/show_ref.php - rename handlers/page/highlightsearch.php in handlers/page/show.php - change 'highlightsearch' by 'show' in textsearch.php (step 2. above) ---- CategoryUserContributions - CategoryDevelopmentHandlers