メールフォームをブログ記事ごとに設置する(その2)

前日の続きで、ブログ記事からメールフォームのページにリンクし、ブログ記事の情報をメールフォームに渡す方法を解説します。

この方法では、メールフォームに渡された情報を、メールフォームプラグインのCGIに渡す処理を入れることが必要になります。
その方法として、以下のようなやり方が考えられます。

  • PHPを使う
  • JavaScriptを使う
  • リアルタイム再構築プラグインを使う

PHPが使えるサーバーであれば、PHPを使う方法が比較的簡単です。
その方法を紹介します。

1.ブログ記事テンプレートの書き換え

まず、ブログ記事テンプレートの中で、メールフォームのページへのリンクを出力したい位置に、以下のようなタグを入れます。
「フィールド名1」等には、メールフォームに渡す情報の名前を自分で決めて指定します。
また、「値1」等には、メールフォームに渡す情報をURLエンコードした値を指定します。
MTのタグの値を渡すなら、そのタグに「encode_url="1"」のモディファイアを付けると、URLエンコードすることができます。

<a href="PHP化したメールフォームのアドレス?フィールド名1=値1&amp;フィールド名2=値2&amp;・・・&amp;フィールド名n=値n">リンクにする文字列</a>

例えば、「この記事に対してメールを送る」という文字列がクリックされたときに、メールフォームのページに移動するようにしたいとします。
メールフォームのアドレスは、「BlogのURL/mailform.php」にするものとします。
また、その際に以下の3つの情報をメールフォームに渡したいとします。

渡す情報情報のフィールド名
ブログの名前mail_blog_name
ブログ記事のタイトルmail_entry_title
ブログ記事のIDmail_entry_id

この場合、ブログ記事のテンプレートで、リンクを表示したい位置に、以下のようなタグを入れます。

<a href="<$MTBlogURL$>mailform.php?mail_blog_name=<$MTBlogName encode_url="1"$>&amp;mail_entry_title=<$MTEntryTitle encode_url="1"$>&amp;mail_entry_id=<$MTEntryID encode_url="1"$>">このブログ記事に対してメールを送る</a>

2.メールフォームテンプレートの書き換え

次に、メールフォームのテンプレートの先頭に、以下のようなタグを入れます。

<MTSetVar name="use_php" value="1">
<?php
$フィールド名1 = htmlspecialchars($_GET["フィールド名1"]);
$フィールド名2 = htmlspecialchars($_GET["フィールド名2"]);
・・・
$フィールド名n = htmlspecialchars($_GET["フィールド名n"]);
?>

例えば、手順1.のようにmail_blog_name/mail_entry_title/mail_entry_idの3つのフィールドの値をメールフォームに送信した場合、メールフォームテンプレートの先頭に、以下のようなタグを入れます。

<MTSetVar name="use_php" value="1">
<?php
$mail_blog_name = htmlspecialchars($_GET["mail_blog_name"]);
$mail_entry_title = htmlspecialchars($_GET["mail_entry_title"]);
$mail_entry_id = htmlspecialchars($_GET["mail_entry_id"]);
?>

3.メールフォーム共通部分テンプレートの書き換え

次に、「メールフォーム共通部分」のテンプレートモジュールを書き換えます。

メールフォーム共通部分のテンプレートモジュールの中に、以下のようなタグがあります。

<input type="hidden" name="mail_blog_id" value="<$MTBlogID$>" />

このタグの前に、以下のようなタグを追加します。
「フィールド名1」等には、手順1.で付けたフィールド名を指定します。

<input type="hidden" name="フィールド名1" value="<MTIf name="use_php"><?php print($フィールド名1); ?><MTElse><$MTMailPreviewExtParam name="フィールド名1"$></MTIf>" />
<input type="hidden" name="フィールド名2" value="<MTIf name="use_php"><?php print($フィールド名2); ?><MTElse><$MTMailPreviewExtParam name="フィールド名2"$></MTIf>" />
・・・
<input type="hidden" name="フィールド名n" value="<MTIf name="use_php"><?php print($フィールド名n); ?><MTElse><$MTMailPreviewExtParam name="フィールド名n"$></MTIf>" />

例えば、手順1.のようにmail_blog_name/mail_entry_title/mail_entry_idの3つのフィールドの値をメールフォームに送信した場合、以下のようなタグを入れます。

<input type="hidden" name="mail_blog_name" value="<MTIf name="use_php"><?php print($mail_blog_name); ?><MTElse><$MTMailPreviewExtParam name="mail_blog_name"$></MTIf>" />
<input type="hidden" name="mail_entry_title" value="<MTIf name="use_php"><?php print($mail_entry_title); ?><MTElse><$MTMailPreviewExtParam name="mail_entry_title"$></MTIf>" />
<input type="hidden" name="mail_entry_id" value="<MTIf name="use_php"><?php print($mail_entry_id); ?><MTElse><$MTMailPreviewExtParam name="mail_entry_id"$></MTIf>" />

4.メールフォームテンプレートの再構築

ここまでの書き換えが終わったら、メールフォームテンプレートを再構築します。

5.メール本文/返信メールテンプレートの書き換え

メール本文および返信メールテンプレートの中で、ブログ記事の情報を出力することもできます。
それには、これらのテンプレートに以下のようなタグを書きます。

<MTMailFormPreviewExtParam name="フィールド名">

例えば、手順1.のようにmail_blog_name/mail_entry_title/mail_entry_idの3つのフィールドの値をメールフォームに送信した場合、それらの値をメールに送信するには、メール本文テンプレートに以下のようなタグを入れます。

送信先のブログの名前:<$MTMailPreviewExtParam name="mail_blog_name"$>
送信先のブログ記事のタイトル:<$MTMailPreviewExtParam name="mail_entry_title"$>
送信先のブログ記事のID:<$MTMailPreviewExtParam name="mail_entry_id"$>