
Wikiで記事を書いていくとカテゴライズしたくなりますが,YukiWikiにはその機能がありません.そこでタイトルを/で区切った場合にそこで階層化されたリンクをつくるようにしました.
具体的に図の例(「hoge/foo/bar」)でいうとhogeをクリックすると「hoge」で検索,fooをクリックすると「hoge/foo」で検索,barをクリックすると「hoge/foo/bar」で検索になるように擬似的に階層化を実現しています.
実装は簡単でwiki.cgiを以下のように修正します.
$ diff -u wiki.cgi.org wiki.cgi --- wiki.cgi.org Thu Jul 6 08:16:12 2006 +++ wiki.cgi Mon Dec 29 15:57:30 2008 @@ -405,6 +405,11 @@ } my $cookedpage = &encode($page); my $escapedpage = &escape($page); + my $path_pusher = sub { + my @path; + return sub {push(@path, shift); join('/', @path);}; + }->(); + print <<"EOD"; Content-type: text/html; charset=$charset @@ -442,9 +447,12 @@ <a href="$url_cgi?$SearchPage">$resource{searchbutton}</a> | <a href="$url_cgi?$RecentChanges">$resource{recentchangesbutton}</a> </div> -<h1 class="header"><a - title="$resource{searchthispage}" - href="$url_cgi?mycmd=search&mymsg=$cookedpage">@{[&escape($page)]}</a>@{[&escape(&get_subjectline($page))]}</h1> +<h1 class="header"> +@{[ + join('/', map(qq(<a href="$url_cgi?mycmd=search&mymsg=@{[&encode(&$path_pusher($_))]}">@{[&escape($_)]}</a>), split('/', $page))) +]} +@{[&escape(&get_subjectline($page))]} +</h1> EOD }
print_header内に$path_pusherを作って,h1を表示するところで使います.クロージャーで実装していますが,他に簡単で綺麗なやり方はあるのかな.Perlは表現手段が多すぎるので何かありそうな気はする.Perl初心者なので知りたいところ.
わかりにくいかもなんでpath_pusherの使用例を載せておきます.
my $path_pusher = sub { my @path; return sub {push(@path, shift); join('/', @path);}; }->(); print &$path_pusher('hoge'), "\n"; # hoge print &$path_pusher('foo'), "\n"; # hoge/foo print &$path_pusher('bar'), "\n"; # hoge/foo/bar
最近普段使うWikiをKinoWikiからYukiWikiに変更したんですがさくらインターネットで設置するときに必要な処理をメモしておきます
mkdir yukiwiki cd yukiwiki wget http://www.hyuki.com/yukiwiki/ykwk213.zip unzip ykwk213.zip chmod +x wiki.cgi
だけやっても500エラーになります.同梱されている.htaccessのExecCGIに問題があり
# Options ExecCGIとコメントアウトします.さらに改行コードに問題があり
nkf -Lu --overwrite wiki.cgi
とすればOkです.
渋谷人多すぎ
* 09年07月04日13時43分
fedoraはfirefox3.5だ。フットワーク軽いな〜
* 09年07月04日00時39分
festivalデフォルトで入ってるんですね
* 09年07月04日00時06分
Effective Java 第2版 (The Java
Series)
¥ 3,780(新品)
Javaをある程度やった人はこの本読んで
昔のコードを恥じましょう.
view all