検索結果をページに埋め込む PukiWiki プラグイン

PukiWiki において、ある文字列を検索するには、search プラグインをブロック型プラグインとして使って検索ボックスを用意するのが普通の方法。でも、常にある特定の文字列を検索したい、ってときに毎回検索ボックスに文字を入力するのは面倒くさい。たとえば、[TODO] という文字列を検索結果として表示できれば、wiki を TODO リストとしても使えるわけ、だけど、毎回 [TODO] って入力するのは勘弁してほしい。

search プラグインをコマンドとして利用、すなわち、?cmd=search&word=%5dTODO%5d のようにすれば、検索語で検索した結果が得られる。この URL でリンクを作っておけば、毎回入力しなくても、ワンクリックで検索結果が得られる。ただし、search.inc.php の先頭で define されている PLUGIN_SEARCH_DISABLE_GET_ACCESS を 0 にしておかないと search プラグインをコマンドとして利用することはできない。

でこのワンクリックも面倒くさい、と思ったので特定の語で検索した結果をブロックとして埋め込むブロック型プラグイン searchout を作成した。

<?php
//require_once('search.inc.php');
function plugin_searchout_convert() {
  global $vars, $_title_result, $_title_search, $_msg_searching;

  $args = func_get_args();
  $in_word = $args[0];
  $base = $args[1];

  $s_word = isset($in_word) ? htmlspecialchars($in_word) : '';
  $type = isset($vars['type']) ? $vars['type'] : '';
  $msg  = str_replace('$1', $s_word, $_title_result);
  $body = do_search($in_word, $type, FALSE, $base);
  return $body;
}
?>

超書きっぱなしスクリプトhttp://coderepos.org/share/browser/platform/pukiwiki/plugin/searchout.inc.phpにソースを置いといたので、適宜直して使うべし。

ともかく、これで特定の語で検索した結果を貼りつけておくことができる。たとえば

#searchout([TODO],projectX/)

とすると、projectX/ 以下から*1 [TODO] を検索して表示してくれる。

*1:projectX/ という文字列で始まる名前のページから