2004-07-16
[ツッコミを入れる]
2007-07-16
@ [fswiki] FSWikiでページのURLをstaticにする(2)
create_urlメソッドを以下のように書き換えるだけでこと足りました。素晴らしい!
と書きましたが、「ページのリンクを生成する」メソッドとしてまとめられているのであれば、Wiki.pmを修正するのではなくプラグインで動的にメソッドを上書きしていけるのでは?と思って1 hour hackしました。
### plugin/staticurl/Install.pm
package plugin::staticurl::Install;
use strict;
use Util;
sub install {
my $wiki = shift;
my $class = ref $wiki;
{
no strict 'refs';
*{"$class\::create_url"} = sub {
my $self = shift;
my $params = shift;
my $url = $self->config('script_name');
my $query = '';
foreach my $key (keys(%$params)){
if($key eq 'page') {
$url = $params->{$key} . ".html";
next;
}
if($query ne ''){
$query .= '&';
}
$query .= Util::url_encode($key)."=".Util::url_encode($params->{$key});
}
if($query ne ''){
$url .= '?'.$query;
}
return $url;
};
*{"Wiki::HTMLParser::wiki_anchor"} = sub {
my $self = shift;
my $page = shift;
my $name = shift;
if(!defined($name) || $name eq ""){
$name = $page;
}
my $page_url = Util::url_encode($page) . ".html";
my $escaped_name = Util::escapeHTML($name);
if($self->{wiki}->page_exists($page)){
return qq{<a href="$page_url" class="wikipage">$escaped_name</a>};
} else {
return qq{<span class="nopage">$escaped_name</span><a href="$page_url">?</a>};
}
};
}
}
1;
Wiki::HTMLParser::wiki_anchor も上書きしているのは、なぜか[[ページ]]の形式で貼ったリンクがstaticにならなかったためです。staticurl という名前でプラグイン化したので使いたい人がいらっしゃればこちらからどうぞ。
FSWiki本家にはあとでプラグイン投稿します。しました。
2007/07/17追記: まとめると...
1. staticurlプラグインを解凍して pluginディレクトリに放りこんでおく
2. FSWikiでログインして、プラグイン設定画面よりstaticurlプラグインを有効にする。この時点でリンクは wiki.cgi?page=FrontPage というURLから FrontPage.html という形式に変わります。
3. mod_rewriteで以下のように設定しapacheを再起動。
RewriteRule ^/$ /wiki.cgi [L,NE,P,QSA] RewriteRule ^/(.+)\.html$ /wiki.cgi?page=$1 [L,NE,P,QSA]
※たぶんFSWiki 3.6.x でしか動きません。
[ツッコミを入れる]