Table of Contents

searchtext plugin

Compatible with DokuWiki

Devel only

plugin Searches pages rendered as text instead of raw wiki. Displays search result snippets from rendered text.

Last updated on
2008-02-28
Provides
Action, Render
Requires
text

Tagged with search

This plugin searches pages rendered as text instead of raw wiki.
This plugin displays search result snippets from text.

:!: This plugin requires:

  1. A text renderer, such as the text plugin
  2. A slight modification to add a FULLTEXT_SNIPPET_GETTEXT event to inc/fulltext.php if you wish to use the snippet capability (see below)

:!: You will need a recent development version of DokuWiki to make this work!

Download

Usage

There are two checkbox configuration items which appear at the bottom of the Admin Configuration Settings:

  1. Search in rendered text
  2. Display search result snippets from rendered text

You must edit the function ft_snippet() in ../inc/fulltext.php in order to provide a FULLTEXT_SNIPPET_GETTEXT event if you wish to use the snippet capability. A sample darcs patch would be:

[Allow plugin to insert search snippet text
Todd Augsburger <todd@rollerorgans.com>**20080227000001
 FULLTEXT_SNIPPET_GETTEXT
 Allow plugin to insert search snippet text
] {
hunk ./inc/fulltext.php 254
-    $text     = rawWiki($id);
+    $text = trigger_event('FULLTEXT_SNIPPET_GETTEXT', $id, 'rawWiki'); 
}

Actual row in code may vary, for DokuWiki 2009-02-14 it's row 289.

Other plugins

This plugin requires a text renderer, such as text, available at http://cobs.rollerorgans.com/plugins/text.zip

Discussion

The develonly version already has a similar event, so then it's better to patch the plugin.

Replace

  function register(&$controller) {
    $controller->register_hook('INDEXER_PAGE_ADD', 'BEFORE',  $this, '_getSearch');
    $controller->register_hook('FULLTEXT_SNIPPET_GETTEXT', 'BEFORE',  $this, '_getSnippet');
  }
 
    .
    .
    .
 
  function _getSnippet(&$event, $param) {
    if($this->getConf('snippet_in_text')) {
      global $ID;
 
      $prevID = $ID;
      $ID = $event->data;
      $event->result = p_cached_output(wikiFN($event->data),'text');
      $ID = $prevID;
      $event->preventDefault();
    }
  }

with

  function register(&$controller) {
    $controller->register_hook('INDEXER_PAGE_ADD', 'BEFORE',  $this, '_getSearch');
    $controller->register_hook('FULLTEXT_SNIPPET_CREATE', 'BEFORE',  $this, '_getSnippet');
  }
 
    .
    .
    .
 
  function _getSnippet(&$event, $param) {
    if($this->getConf('snippet_in_text')) {
      global $ID;
 
      $prevID = $ID;
      $ID = $event->data['id'];
      $event->result = p_cached_output(wikiFN($event->data['id']),'text');
      $ID = $prevID;
      $event->preventDefault();
    }
  }

HåkanS 2009/10/30 17:49

The latest DokuWiki (DokuWiki-2009-12-25c) works unmodified with the following _getSnippet():

  function register(&$controller) {
    $controller->register_hook('INDEXER_PAGE_ADD', 'BEFORE',  $this, '_getSearch');
    $controller->register_hook('FULLTEXT_SNIPPET_CREATE', 'BEFORE',  $this, '_getSnippet');
  }
 
  function _getSnippet(&$event, $param) {
    if($this->getConf('snippet_in_text')) {
      global $ID;
      $prevID = $ID;
      $ID = $event->data['id'];
      $event->data['text'] = p_cached_output(wikiFN($event->data['id']),'text');
      $ID = $prevID;
    }
  }

Hansel Mon Jan 25 11:09:18 CET 2010

To make the modification above work properly you have to delete the old index and metadata: in <dokukiki>/data

sudo rm -rf cache/* meta/* index/*

Hansel Tue Jan 26 08:12:59 UTC 2010 Howto recreate the indexes