処理結果を専用ページに出力する

処理結果を専用ページに出力する

サンプルプログラムの作成

アクセスすると今日の日付を専用ページに表示するプラグインを例に、プラグインの作成方法を紹介します。

まず、lib/webliberty/Plugin/ 内に Sample2.pm を作成し、ファイル内に以下の内容を記述します。ファイルの文字コードは UTF-8N にしておきます。

package webliberty::Plugin::Sample2;

use strict;

sub new {
  my $class = shift;

  my $self = {
    init   => shift,
    config => shift,
    query  => shift
  };
  bless $self, $class;

  return $self;
}

sub run {
  my $self = shift;

  if ($self->{query}->{plugin}) {
    my($sec, $min, $hour, $day, $mon, $year, $week) = localtime(time);
    my $date = sprintf("%02d月%02d日", $mon + 1, $day);

    print "Content-Type: text/html; charset=utf-8\n\n";
    print "<html>\n";
    print "<head><title>サンプル</title></head>\n";
    print "<body>\n";
    print "<p>今日の日付は$dateです。</p>\n";
    print "</body>\n";
    print "</html>\n";
    exit;
  }

  return;
}

1;

ファイルが作成できたら、?plugin=Sample2 を付加してプログラムを呼び出します。具体的には、http://your.site.addr/diary.cgi?plugin=Sample2 のようになります。ブラウザに 今日の日付は10月31日です。 のように表示されます。(アクセスした日付が表示されます。)

以下では、このプラグインを例に処理内容を解説します。

プラグインの名前

まずは作成するプラグインの名前を決めます。名前については処理結果をページに埋め込むと同じです。

プラグインの呼び出し方が前回と異なっていますが、?plugin=プラグイン名 としてプログラムを呼び出すと、処理結果を専用ページに出力することができます。

コンストラクタの実装

プラグインが実行される際、初めに new メソッド(コンストラクタ)が自動的に呼び出されます。コンストラクタについては処理結果をページに埋め込むと同じです。

実行したい処理の実装

プラグイン内に run メソッドがあれば、本体の処理開始前にこのメソッドが自動的に呼び出されます。実際にプラグインで処理したい内容をこの中に記述します。今回、run メソッドの内容は以下のとおりです。

sub run {
  my $self = shift;

  if ($self->{query}->{plugin}) {
    my($sec, $min, $hour, $day, $mon, $year, $week) = localtime(time);
    my $date = sprintf("%02d月%02d日", $mon + 1, $day);

    print "Content-Type: text/html; charset=utf-8\n\n";
    print "<html>\n";
    print "<head><title>サンプル</title></head>\n";
    print "<body>\n";
    print "<p>今日の日付は$dateです。</p>\n";
    print "</body>\n";
    print "</html>\n";
    exit;
  }

  return;
}

print 関数で、普通にページ表示処理を記述しています。出力する内容はUTF-8のコードとして記述します。表示処理が終わったら、exit 関数でプログラムを終了させます。これを忘れると、プラグイン実行後に記事一覧画面の表示処理が実行されてしまうので注意してください。

ページ表示処理全体を if ($self->{query}->{plugin}) {} で囲んでいますが、これは ?plugin=プラグイン名 という形式でプラグインが呼ばれた時のみ処理を実行するためです。処理結果を専用ページに出力する際にこの処理を忘れると、他のプラグインが正しく実行できなくなる可能性があるので注意してください。この値についての詳細は引数から受け取る内容の詳細を参照してください。

今回は処理結果をページに埋め込む方式ではないため、return で値を返す必要はありません。(もちろん、return 自体を省略しても問題ありません。)

まとめ

以上が、処理結果を専用ページに出力する場合の最小限のプラグインサンプルです。まとめると

となります。