コールバックを利用してA-Formの処理に割り込む

  • 投稿日:
  • by
  • カテゴリ:

A-Form」は株式会社アークウェブ社のMTプラグインです。弊社はA-Form開発のお手伝いをさせていただいております。

今回はA-Formの処理に独自の処理を組み込むための概要を記事にしてみました。

MTプラグイン作成経験のある方向けの内容になっています。(プラグインそのものの作り方についての解説はありません)

MovableTypeにはコールバックと呼ばれる仕組みが実装されており、MovableTypeの処理に割り込んで独自の処理を行わせることが可能です。

A-Formについてもコールバックポイントが用意されており、A-Formの処理に割り込むことができます。

  • aform_before_store: 受付データを保存する前に呼び出されます
  • aform_after_store: 受付データを保存した後に呼び出されます
  • aform_before_send_mail: 管理者へメール送信する前に呼び出されます

他にも色々なコールバックポイントがあります。A-Formのソースを"run_callbacks"で探すと見つかるでしょう。

管理者へメール送信する前に割り込んで、メール本文を書き換えてみましょう。

コールバックポイントは"aform_before_send_mail"です。plugins/AForm/lib/AFormEngineCGI/FormMail.pmに見つかります。

MT->run_callbacks('aform_before_send_mail', $app, \%headers, \$body, $aform);

コールバックへ渡される変数は以下の通りです。

  • $app: MTインスタンス
  • \%headers: メールヘッダー(ハッシュ配列へのリファレンス)
  • \$body: メール本文(リファレンス)
  • $aform: MT::AFormオブジェクト

メールヘッダーおよびメール本文はリファレンスが渡されるので、コールバック側で書き換えることができます。

例えば以下のようなコールバックを用意し、$ref_bodyに新しい値をセットすればメール本文が書き換えられます。

sub cb_aform_before_send_mail {
  my ($cb, $app, $ref_headers, $ref_body, $aform) = @_;

  # フォームIDが「123」なら本文の最後に「abc」を追加する
  if ($aform->id == 123) {
    $$ref_body .= 'abc';
  }
}
  • 外部システムから情報を取得し、メール本文に追記する
  • メール本文に特定の文字列が見つかったら、メール送信先を変更する

など様々な処理を行うことができるでしょう。

このようにコールバックを利用することで、MTやA-Formのソースを書き換えることなく処理を追加することが出来ます。