WikiNameを文中に入れると,そのページへのリンクが自動で張られます.
この機能は便利だと思うのですが,まだ作っていないページのWikiNameを入れた場合, HogeHoge?のような物が挿入されてちょっと邪魔です.
PukiWikiのソースを少しいじって,この機能を無効にします.

ソースファイルを想像する

まずはどのファイルでWikiNameの処理をしているか想像します.
WikiNameの処理はヘルプを読むと特にプラグインを使っているわけでは無いみたいなので 目的のソースはpluginディレクトリではなく,lib内に有りそうな気がします
libディレクトリ内を見るとmake_link.phpというそれっぽいファイルがあるので開いてみます.

ソース内を検索する

このファイル内を「WikiName」で検索してみます.すると,

$converters = array(
   'plugin',        // Inline plugins
   'note',          // Footnotes
   'url',           // URLs
   'url_interwiki', // URLs (interwiki definition)
   'mailto',        // mailto: URL schemes
   'interwikiname', // InterWikiNames
   'autolink',      // AutoLinks
   'bracketname',   // BracketNames
   'wikiname',      // WikiNames
   'autolink_a',    // AutoLinks(alphabet)

という部分が見付かりました.ためしに,WikiNamesの行をコメントアウトしてみます.
すると,無効なWikiNameからリンクが消えました.
が,有効なWikiNameに挿入されるリンクも消えてしまいました.(当然ですが^^;) 無効なリンクだけを消したいので,無効なリンクを生成している部分を検索する事にします.
無効なリンク共通のキーワードは「cmd=edit」がリンク先のアドレスに含まれるので,
こいつを検索してみます.すると,

$retval = $s_alias . '<a href="' .
      $script . '?cmd=edit&amp;page=' . $r_page . $r_refer . '
      $_symbol_noexists . '</a>';
if (! $link_compact)
      $retval = '<span class="noexists">' . $retval . '</span>

とい部分が見付かります.読んでみた感じだとここがあやしいです.

ソースをいじくる

lib/make_link.phpの713行目辺りで無効なWikiNameの処理をしているようなので,
この辺りをいじる事にします.
とりあえず,リンクを作る必要がないので,ここら一帯をコメントアウトし,
retvalに元の文字列であるs_aliasを代入してみます.

//$retval = $s_alias . '<a href="' .
//      $script . '?cmd=edit&amp;page=' . $r_page . $r_refer . '
//      $_symbol_noexists . '</a>';
//if (! $link_compact)
//      $retval = '<span class="noexists">' . $retval . '</span>
$retval=$s_alias;

HogeHoge FrontPage
これで意図した通りの動作をしているようです.また問題があれば修正します.
もっと簡単な方法がないか詳しい方教えてください.


お名前:

プログラミングに戻る