クエリに応じた処理を行う

クエリに応じた処理を行う

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

コメント投稿時にEメールの入力を必須にするプラグインを例に、プラグインの作成方法を紹介します。(Web Diary Pro を基に解説します。)

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

package webliberty::Plugin::Sample3;

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}->{mode} eq 'comment' and $self->{query}->{work} eq 'regist') {
    if (!$self->{query}->{mail}) {
      print "Content-Type: text/html; charset=utf-8\n\n";
      print "<html>\n";
      print "<head><title>サンプル</title></head>\n";
      print "<body>\n";
      print "<p>Eメールの入力は必須です。</p>\n";
      print "</body>\n";
      print "</html>\n";
      exit;
    }
  }

  return;
}

1;

ファイルが作成できたら、任意の記事にコメントを投稿してみてください。Eメールの欄が入力されていないとエラーメッセージが表示されます。

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

プラグインの名前

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

コンストラクタの実装

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

実行したい処理の実装

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

sub run {
  my $self = shift;

  if ($self->{query}->{mode} eq 'comment' and $self->{query}->{work} eq 'regist') {
    if (!$self->{query}->{mail}) {
      print "Content-Type: text/html; charset=utf-8\n\n";
      print "<html>\n";
      print "<head><title>サンプル</title></head>\n";
      print "<body>\n";
      print "<p>Eメールの入力は必須です。</p>\n";
      print "</body>\n";
      print "</html>\n";
      exit;
    }
  }

  return;
}

モードに応じた処理を行い、コメント投稿時にEメールが入力されていなければ print 関数でエラーメッセージを出力しています。表示処理が終わったら、exit 関数でプログラムを終了させます。これを忘れると、エラーメッセージ表示後に記事一覧画面の表示処理が実行されてしまうので注意してください。

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

今回はコメント投稿時のみにEメールの入力チェック処理を行いたいのですが、コメント投稿モードなのかを判別するため、$self->{query} を使用しています。この値についての詳細は引数から受け取る内容の詳細を参照してください。

上のプログラムにある

$self->{query}->{mode} eq 'comment'

という条件は「コメントモード」かどうかを判断するものです。

$self->{query}->{work} eq 'regist'

という条件は「コメント投稿モード」かどうかを判断するものです。

!$self->{query}->{mail}

という条件は「Eメールが未入力」かどうかを判断するものです。それぞれどのクエリーにどんな値が格納されるかは、lib/webliberty/App/ 内のプログラムを読む必要があります。

まとめ

以上が、クエリに応じた処理を行う場合の最小限のプラグインサンプルです。まとめると

となります。