multcat プラグイン   2005/10/03 (Mon)  23:25  [blosxom]

Ck2 Bloggerさんのところで、multcatプラグインのことが書かれていたので、ネタがてら見てみました。

なになに…シンボリックリンクをサポートしている OS 上でなら動くと。つまり、UNIX 系のサーバで blosxom を動かしている場合なら動く模様。それから…っと。対象のカテゴリに複数回エントリを投稿しなくてもいいらしい、と。categorytree プラグインを使用している場合でも、重複してカウントされはしても問題なく動く模様。あとはプラグインの順序を調整しないといけない場合がある、と。
プラグインに書かれているドキュメントはこんな感じですね。

すぐ動かせる UNIX 環境が手元にないのでソースだけ見てみました。解釈ミスしていたらごめんなさい。

まず気がつく点は、filter サブルーチンのみ定義してあるだけなので、特に投稿する際にシンボリックリンクを作成してくれるとかそういう機能は一切持っていない様子。どうやら全エントリ表示した場合などに重複してエントリを表示させないようにしているのが multcat プラグインの目的だと思われます。
まず、blosxom 本体でエントリとして該当するファイル(ファイル名が index でないとか拡張子が該当するもの)の中から、シンボリックリンクの場合のみ処理を行います(if 文)。そしてシンボリックリンクの参照先を調べるわけですが、参照先が相対パスで指定されている場合もあるので、その場合は絶対パスに直します(while 文)。その後、エントリの連想配列中のキーがシンボリックリンクの参照先のフルパスであるものの値(タイムスタンプ)を見て、値が取得できれば(つまり該当エントリ中にシンボリックリンクの参照先のエントリが存在する)シンボリックリンクをエントリから除きます(next ~ delete の部分)。値が取得できない場合は、次のエントリがシンボリックリンクでないかどうか調べ、同様に処理を繰り返します。デバッグ部分は無視してかまわないでしょう。

そういうわけで、multcat プラグインを使用しなくても、blosxom がエントリとして認めるシンボリックリンク名にして、エントリ実体が投稿してあるカテゴリとは異なるカテゴリに、参照先がそのエントリに設定してあるシンボリックリンクを作成すれば、重複してエントリが表示されるという問題はあるにしても複数カテゴリに投稿することはできそうですね。そして、複数カテゴリにシンボリックリンクを作成する機能を持ったプラグインまたは CGI を使用してエントリを投稿できれば、multcat プラグインを使用することで重複エントリを表示させることなく重複カテゴリに投稿できそう。ただし、filter サブルーチンを使用している関係から、他のプラグインに影響を与える可能性があるので若干の調整が必要そうです。

wikieditish message: Ready to edit this entry.