Asakusa

1 月 3rd, 2009 in Diary, from iPhone users

YukiWikiでPukiWiki風にパスのリンクを「/」区切りで階層化する方法

12 月 29th, 2008 in Perl, Wiki users


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&amp;mymsg=$cookedpage">@{[&escape($page)]}</a>@{[&escape(&get_subjectline($page))]}</h1>
+<h1 class="header">
+@{[
+ join('/', map(qq(<a href="$url_cgi?mycmd=search&amp;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

http://codepad.org/GvYTuvGI

さくらインターネットでYukiWiki

12 月 29th, 2008 in Perl, Sakura, Wiki users

最近普段使う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です.

Recent Posts

Search

ドミノ・ピザ 5%OFF!

デル株式会社

 iTunes Store(Japan)

Sony Style(ソニースタイル)

Recommend

Effective Java 第2版 (The Java Series)
Effective Java 第2版 (The Java
Series)

¥ 3,780(新品)
Javaをある程度やった人はこの本読んで
昔のコードを恥じましょう.

view all

Categories

Tags