「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のソースを書き換えることなく処理を追加することが出来ます。
コメント