PukiWikiの通常リンク方法では同窓リンク(『target="_blank"』オプション無し)となるが、それを別窓リンク(『target="_blank"』オプション有り)にも対応させる方法。
ココにも色々と書いてあるが、やる事が多いのと自分では解りにくかったので他の方法を模索。
下みたいな感じでリンクをページを書くと、リンクが出来る様にPHPファイルを一部修正する。
通常リンク方法 → [[ns-lab>http://www.ns-lab.org/]] 別窓リンク方法 → [[ns-lab>+http://www.ns-lab.org/]]
編集するファイルは、『[PukiWiki]/lib/make_link.php』ファイル。
基本的には以下に書いてある方法で出来るが、PukiWikiのバージョンによっては書き換える内容を変更する必要がある。...かも?
1. [class Link_url extends Link()] - [function get_pattern()]
function get_pattern() { $s1 = $this->start + 1; return <<<EOD (\[\[ # (1) open bracket ((?:(?!\]\]).)+) # (2) alias (?:>|:) )? ( # (3) url (?:(?:https?|ftp|news):\/\/|mailto:)[\w\/\@\$()!?&%#:;.,~'=*+-]+ ) (?($s1)\]\]) # close bracket EOD; }
function get_pattern() { $s1 = $this->start + 1; return <<<EOD (\[\[ # (1) open bracket ((?:(?!\]\]).)+) # (2) alias (?:>|:) )? ( # (3) url (?:(?:\+?https?|\+?ftp|\+?news):\/\/|mailto:)[\w\/\@\$()!?&%#:;.,~'=*+-]+ ) (?($s1)\]\]) # close bracket EOD; }
2. [class Link_url extends Link()] - [function toString()]
function toString() { if (FALSE) { $rel = ''; } else { $rel = ' rel="nofollow"'; } return '<a href="' . $this->name . '"' . $rel . '>' . $this->alias . '</a>'; }
function toString() { if (FALSE) { $rel = ''; } else { $rel = ' rel="nofollow"'; } if (ereg("^(\+)(.*)", $this->name, $regs)) { return '<a href="' . $regs[2] . '" target="_blank" ' . $rel . '>' . $this->alias . '</a>'; }else{ return '<a href="' . $this->name . '"' . $rel . '>' . $this->alias . '</a>'; } }
function toString() { if (FALSE) { $rel = ''; } else { $rel = ' rel="nofollow"'; } if (preg_match("/^(\+)(.*)/", $this->name, $matches)) { return '<a href="' . $matches[2] . '" target="_blank" ' . $rel . '>' . $this->alias . '</a>'; }else{ return '<a href="' . $this->name . '"' . $rel . '>' . $this->alias . '</a>'; } }
そうすると、URLの先頭に+をつけるリンクを作成する事によって、別窓リンクが可能になる。
また、今回の改良はその他文字装飾系プラグインと同時使用する事も可能。