フリーCGIスクリプト配布サイト。
コメント投稿時に投稿者のIPアドレスを記録するプラグインを例に、プラグインの作成方法を紹介します。(Web Diary Pro を基に解説します。)
まず、lib/webliberty/Plugin/
内に Sample4.pm
を作成し、ファイル内に以下の内容を記述します。ファイルの文字コードは UTF-8N
にしておきます。
package webliberty::Plugin::Sample4;
use strict;
sub new {
my $class = shift;
my $self = {
init => shift,
config => shift,
query => shift
};
bless $self, $class;
return $self;
}
sub complete {
my $self = shift;
if ($self->{query}->{mode} eq 'comment' and $self->{query}->{work} eq 'regist' and $self->{query}->{exec_regist}) {
if (open(FH, ">>./test.txt")) {
print FH "$ENV{'REMOTE_ADDR'}\n";
close(FH);
} else {
print "Content-Type: text/html; charset=utf-8\n\n";
print "<html>\n";
print "<head><title>サンプル</title></head>\n";
print "<body>\n";
print "<p>データの記録に失敗しました。</p>\n";
print "</body>\n";
print "</html>\n";
exit;
}
}
return;
}
1;
ファイルが作成できたら、diary.cgi
と同じディレクトリ内に test.txt
を作成し、パーミッションを 606
に設定します。その後、任意の記事にコメントを投稿してみてください。test.txt
にIPアドレスが記録されます。
以下では、このプラグインを例に処理内容を解説します。
まずは作成するプラグインの名前を決めます。名前については処理結果をページに埋め込むと同じです。
プラグインが実行される際、初めに new
メソッド(コンストラクタ)が自動的に呼び出されます。コンストラクタについては処理結果をページに埋め込むと同じです。
プラグイン内に complete
メソッドがあれば、本体の処理開始後にこのメソッドが自動的に呼び出されます。実際にプラグインで処理したい内容をこの中に記述します。今回、complete
メソッドの内容は以下のとおりです。
sub complete {
my $self = shift;
if ($self->{query}->{mode} eq 'comment' and $self->{query}->{work} eq 'regist' and $self->{query}->{exec_regist}) {
if (open(FH, ">>./test.txt")) {
print FH "$ENV{'REMOTE_ADDR'}\n";
close(FH);
} else {
print "Content-Type: text/html; charset=utf-8\n\n";
print "<html>\n";
print "<head><title>サンプル</title></head>\n";
print "<body>\n";
print "<p>データの記録に失敗しました。</p>\n";
print "</body>\n";
print "</html>\n";
exit;
}
}
return;
}
モードに応じた処理を行い、コメント投稿完了時に open
関数で test.txt
を開き、IPアドレスを出力しています。IPアドレスは環境変数から普通に取得しているだけです。
$self->{query}
についての詳細は引数から受け取る内容の詳細を参照してください。
以上が、本体の処理完了時に処理を行う場合の最小限のプラグインサンプルです。まとめると
complete
メソッドを実装すると、本体の処理完了時に自動的にメソッドが呼ばれる。$self->{query}
を参照して 条件分岐を行い、特定の条件下で実行したい処理を記述する。となります。