トップ «前の日記(2007-07-15) 最新 次の日記(2007-07-17)» 編集

おいぬま日報(不定期)

カテゴリ | 技術情報まとめWiki | 検索エンジンから来た人向け | RSS

2007年
7月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31



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 でしか動きません。


Bookmark: あんてな | ぶっくまーく | 覚え書き | Project Amateras | ExcelPettyCashBook | FreeStyle Wiki

2002|10|11|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|11|12|
2008|01|02|03|04|05|06|07|08|10|11|
人気ブログランキング - おいぬま日報(不定期)