all about blosxom
Table of Contents
blosxomのプラグインについてのページです。
blosxomはデフォルトで提供されている機能は少なく、プラグインによってその機能を拡張します。つまり、ちょっと何かをしようとするとプラグインが必要になるということでもあるので、日本語で良くまとまっているページが無いこともあり、この点では敷居が高いというか取っ掛かりが無い感じではあります。
かなり数多くのプラグインが公式サイトにある上、既にblosxomを利用している日本人達が公開していることも多いので、検索エンジンで探してみると欲しい機能を実装したプラグインが見つかるかもしれません。もしかしたらPluginListでも欲しいプラグインが見つかるかもしれません。
ほとんどのプラグインは設定で指定したプラグインのディレクトリ($plugin_dir)に置くだけで動作します。
設定が必要な場合やフレーバーに変数を記述する必要がある場合、独自にフレーバーを作成する必要がある場合もありますが、それらはプラグインによって違い、一概には説明できないので、プラグイン自体に添付されているドキュメントや配布元のページを参照してください。
プラグイン自体に添付されているドキュメントは、多くの場合PODというフォーマットで書かれている事が多いので、Perlが導入済みのマシンなら、
perldoc plugin
などと、perldocユーティリティで閲覧することが可能です。
もしかしたら設定や変数についてのページがこのWikiにあるかもしれません。
プラグインの作成については、いくつかのプラグインを参考にして書き換えながら覚えていくのが一番手っ取り早いと思います。もちろん公式サイトのプラグイン・アーキテクチャの解説(やその日本語訳)も大いに役に立ちます。
blosxomのプラグイン・アーキテクチャは、blosxomのフロー処理をいくつかのブロックに分け、それぞれをプラグインによりそのブロックで行われる処理を上書き(または入れ替え)するという形のものです。フロー処理のブロックは、
の13種類があります。プラグインでこれらのブロックで行われる処理を上書きするためには、
sub story {
my($pkg, $path, $fn, $story_ref, $title_ref, $body_ref) = @_;
$$title_ref = "#" . $num++ . ". " . $$title_ref;
return 1;
}
といったようにそれぞれのブロックの名前でサブルーチンを作ってやります。
blosxomの設定(See Also: SetupBlosxom)の他にもプラグインから扱うことができる変数がいくつかあります。
それぞれの変数はblosxomというnamespaceでアクセスすることができるので、$blosxom::blog_titleや@blosxom::pluginsなどという形で参照します。
以下はそれぞれのサブルーチンの使い方の簡単な説明です。
startサブルーチンはプラグインの有効・無効を切り替えることがメインの目的で定義されているものです。このサブルーチンは必ず必要なので、全てのプラグインでその利用例は見つけることができるでしょう。
また、0を返してやれば、そのプラグインは無効になるので、例えば静的生成の場合にはプラグインを動作させないようにするためには、
sub start {
return 0 if $blosxom::static_or_dynamic eq 'static';
return 1;
}
という様にしてやればプラグインのロードによるオーバーヘッドを極力抑えることが出来ます。
templateサブルーチンはデフォルトのフレーバー読み込みサブルーチンを上書きするために定義されているものです。themeでの利用がリファレンス的な実装になります。
このサブルーチンをプラグインで利用する場合、プラグイン側では無名サブルーチンを返してやる必要があります。逆に利用しない場合はundefを返してやらねばなりません。
また、このサブルーチンがundef以外を返すと、それ以降に実行されるプラグインでtemplateサブルーチンが定義されていても実行されません。他のプラグインとの排他的な利用になるということなので、利用の際には細心の注意を払いましょう。
entriesサブルーチンはデフォルトのエントリ検索サブルーチンを上書きするために定義されているものです。entries_indexでの利用がリファレンス的な実装になります。
このサブルーチンをプラグインで利用する場合、templateサブルーチンと同じく、プラグイン側では無名サブルーチンを返してやる必要があります。逆に利用しない場合はundefを返してやらねばなりません。
また、このサブルーチンがundef以外を返すと、それ以降に実行されるプラグインでentriesサブルーチンが定義されていても実行されません。他のプラグインとの排他的な利用になるということなので、利用の際には細心の注意を払いましょう。
filterサブルーチンはリストアップされたエントリをフィルタリングするために定義されているものです。excludeでの利用がリファレンス的な実装になります。
引数は、
の二つです。
skipサブルーチンは出力の生成が始まる少し前に呼ばれます。lastmodifiedでの利用がリファレンス的な実装になります。
このサブルーチンが0を返すとそのままblosxomの処理は続行されますが、1を返すとinterpolateとhead、sort、date、story、foot、lastの各サブルーチンはスキップされます。つまり、きちんと出力を生成する必要が無い場合には、このサブルーチンを利用することによってblosxomの処理速度を大幅に上げることが出来ます。
具体的にはIf-Modified-Since付きのリクエストに対して、Statusで304 Not Modifiedを返す場合などでしょうか。304 Not Modifiedを返す場合は、HTTPヘッダ以外を出力する必要はないので、出力を生成する必要はなくなります。こういった場合にはskipサブルーチンが大きな意味を持ちます。
また、このサブルーチンがundefや0以外を返すと、それ以降に実行されるプラグインでskipサブルーチンが定義されていても実行されません。他のプラグインとの排他的な利用になるということなので、利用の際には細心の注意を払いましょう。
interpolateサブルーチンはデフォルトのフレーバー処理サブルーチンを上書きするために定義されているものです。interpolcate_fancyでの利用がリファレンス的な実装になります。
デフォルトのフレーバー処理サブルーチンは、フレーバー内に記述された変数の処理を担当します。多くの公開されているプラグインはデフォルトのフレーバー処理サブルーチンを前提にして作成されているので、プラグインでこのサブルーチンを利用する場合は、デフォルトの処理を継承した形で実装することが推奨されます。
このサブルーチンをプラグインで利用する場合、templateサブルーチンと同じく、プラグイン側では無名サブルーチンを返してやる必要があります。逆に利用しない場合はundefを返してやらねばなりません。
また、このサブルーチンがundef以外を返すと、それ以降に実行されるプラグインでinterpolateサブルーチンが定義されていても実行されません。他のプラグインとの排他的な利用になるということなので、利用の際には細心の注意を払いましょう。
headサブルーチンは出力の開始に呼ばれ、このサブルーチンの終了後にhead.flavourが実際に処理されます。
引数は、
の二つです。
sortサブルーチンはデフォルトのエントリ・ファイルのソートサブルーチンを上書きするために定義されているものです。
このサブルーチンをプラグインで利用する場合、templateサブルーチンと同じく、プラグイン側では無名サブルーチンを返してやる必要があります。逆に利用しない場合はundefを返してやらねばなりません。
また、このサブルーチンがundef以外を返すと、それ以降に実行されるプラグインでsortサブルーチンが定義されていても実行されません。他のプラグインとの排他的な利用になるということなので、利用の際には細心の注意を払いましょう。
dateサブルーチンはエントリの出力処理ごとに呼ばれ、このサブルーチンの終了後にdate.flavourが実際に処理されます。しかしながらdate.flavourの出力に変化がなかった場合には、実際には出力に追加されません。
引数は、
の九つです。
storyサブルーチンはエントリの出力処理ごとに呼ばれ、このサブルーチンの終了後にstory.flavourが実際に処理されます。
引数は、
の五つです。
footサブルーチンは出力の最後に呼ばれ、このサブルーチンの終了後にfoot.flavourが実際に処理されます。
引数は、
の二つです。
lastサブルーチンは出力の生成が完了した後、出力する直前に呼ばれます。つまり、生成した結果をいじりたい時やそれを利用して何かしたいに使えます。
endサブルーチンは出力が終わった後に呼ばれます。lastとは違い、skipが1を返していたとしても必ず呼ばれるので、プラグインの後始末などにはこれを利用するのが良いでしょう。
ヘルパー・スクリプトというかプラグインのスケルトン作成スクリプトです。
$ blosxom-plugin-helper.pl test
などと引数にプラグイン名を渡してやると、うまいことスケルトンを作成してくれます。
Download: http://hail2u.net/archives/blugins/blosxom-plugin-helper.pl
コピー・アンド・ペーストで利用できるプラグインのテンプレートです。
# Blosxom Plugin: foo
# Author(s): Your Name <your@mail.address>
# Version:
# Blosxom Home/Docs/Licensing: http://www.blosxom.com/
package foo;
use strict;
use vars qw($bar);
# --- Configurable variables -----------
# --- Plug-in package variables --------
# --------------------------------------
use Foo::Bar;
sub start {
return 1;
}
sub template {
return sub {
my($path, $chunk, $flavour) = @_;
return join '', ($blosxom::template{$flavour}{$chunk} || $blosxom::template{error}{$chunk} || '');
};
}
sub entries {
return sub {
my(%files, %indexes, %others);
return(\%files, \%indexes, \$others);
};
}
sub filter {
my($pkg, $files_ref, $others_ref) = @_;
return 1;
}
sub skip {
return 0;
}
sub interpolate {
return sub {
package blosxom;
my $template = shift;
return $template;
};
}
sub head {
my($pkg, $path, $head_ref) = @_;
return 1;
}
sub sort {
return sub {
my($files_ref) = @_;
return keys %$files_ref;
};
}
sub date {
my($pkg, $path, $date_ref, $mtime, $dw, $mo, $mo_num, $da, $ti, $yr) = @_;
return 1;
}
sub story {
my($pkg, $path, $fn, $story_ref, $title_ref, $body_ref) = @_;
return 1;
}
sub foot {
my($pkg, $path, $foot_ref) = @_;
return 1;
}
sub end {
return 1;
}
sub last {
return 1;
}
1;
Last-Modified: 2006-11-21T18:34:31+09:00