今日は、メールフォームにチェックボックス(<input type="checkbox"…>)を追加する方法を解説します。
1.メールフォームのテンプレートへのタグの追加
まず、メールフォームのテンプレート(インデックス・テンプレートとして作成したもの)に、チェックボックスのフィールドを追加します。
これは通常のフォームの通りです。
1行のテキストを入力する欄は、以下のようなタグで追加することができます。
<input type="text" name="フィールド名" value="チェックがオンのときにCGIに送信する値" />
また、初期状態でチェックをオンにしておくなら、以下のように「checked="checked"」の属性も入れます。
<input type="text" name="フィールド名" value="チェックがオンのときにCGIに送信する値" checked="checked" />
なお、フィールド名は自由に指定できますが、メールフォームプラグインの内部で使っている名前と重複しないようにする必要があります。
フィールド名の制限は、テキスト入力欄の追加のエントリーを参照してください。
2.送信前確認等のテンプレートへのタグの追加
送信前確認/送信エラー等のテンプレートでは、メールフォームのチェックボックスの状態を反映することが必要になります。
これは、GetQueryParamプラグインの「MTIfQueryParam」という条件タグで行うことができます。
MTIfQueryParamタグは、フォームのフィールドの値が、ある値に一致している時のみ、タグの内側を出力する働きをします。書き方は以下のようになります。
<MTIfQueryParam name="フィールド名" value="検査する値"> フィールドの値が検査する値に等しいときに出力する内容 </MTIfQueryParam>
メールフォームでのチェックボックスの状態を、送信前確認等のページに反映するようにするには、以下のような書き方をします。
<input type="text" name="フィールド名" value="チェックがオンのときにCGIに送信する値"<MTIfQueryParam name="フィールド名" value="チェックがオンのときにCGIに送信する値"> checked="checked"</MTIfQueryParam> />
3.例
メールフォームに、「要返信」というチェックボックスを追加したいとします。
また、チェックがオンのときには、メールフォームプラグインのCGIに「1」という値を渡したいとします。
この場合、メールフォームのテンプレートには、以下のようなタグを入れます。
<p> <input type="checkbox" name="mail_require_reply" value="1" /> 要返信 </p>
また、送信前確認のテンプレートや送信エラーのテンプレートには、以下のようなタグを入れます。
<p> <input type="checkbox" name="mail_require_reply" value="1"<MTIfQueryParam name="mail_require_reply" value="1"> checked="checked"</MTIfQueryParam> /> 要返信 </p>
4.前後のエントリー
メールフォームプラグインは解説が長いので、エントリーを複数に分けています。
前後のエントリーは以下のリンクで参照することができます。
前のエントリー(その5・テキストの入力欄の追加)
次のエントリー(その7・ラジオボタン/セレクトの追加)
また、サイドバーの「関連するエントリー」の箇所に、メールフォーム関連のエントリーの一覧が表示されていますので、そちらもご利用ください。






![Hardcore Will Never Die, But You Will [Bonus Tracks] Hardcore Will Never Die, But You Will [Bonus Tracks]](http://userserve-ak.last.fm/serve/34s/67192634.jpg)



コメントはスレッド表示になっています。
また、スレッドの先頭のコメントに対する返信には、先頭に矢印を表示しています。
メールフォーム使わせてもらってます。
バージョンアップしたようなので、DLさせていただきました。
今書き換えてる最中なんですけど、
この記事にある、
>メールフォームでのチェックボックスの状態を、送信前確認等のページに反映
>するようにするには、以下のような書き方をします。
<input type="text" name="フィールド名" value="チェックがオンのときにCGIに送信する値"<MTIfQueryParam name="フィールド名" value="チェックがオンのときにCGIに送信する値"> checked="checked"</MTIfQueryParam> />
と書いてありますが、value="チェックがオンのときにCGIに送信する値"
の後の閉じ括弧">"はいらないのですか???
>通りすがりさん
こんにちは。プラグインご利用ありがとうございます。
ご質問の件ですが、「<MTIfQueryParam ・・・」の直前のことのことでしょうか。
この部分はMTのテンプレートタグですので、実際の出力の際には以下のように変化します。
・フォームでチェックがオンにされた場合
この部分が「 checked="checked"」に置き換わり、全体として以下のようなタグが出力されることになります。
<input type="text" name="フィールド名" value="チェックがオンのときにCGIに送信する値" checked="checked" />
・フォームでチェックがオフにされた場合
この部分は何も出力されなくなり、全体として以下のようなタグが出力されます。
<input type="text" name="フィールド名" value="チェックがオンのときにCGIに送信する値" />
したがって、「<MTIfQueryParam ・・・」の直前に「/>」を入れると、動作が正しくなりません。
メールフォーム使わせていただいております。
ありがとうございます。
<input name="mail_inquiry" type="checkbox" value="お問い合わせ"<MTIfQueryParam name="mail_inquiry" value="お問い合わせ"/< checked="checked"</MTIfQueryParam> /<お問い合わせ
というのを入れる場合ですが、
mail_previewのhiddenの部分にはどう入れればよいのでしょうか。
type=hiddenに変更しただけだとダメなようなので教えていただければと思います。よろしくお願いします。
>chacoさん
こんにちは。
ご質問の件ですが、以下のようなことをしたいと考えれば良いでしょうか。
・「お問い合わせ」のチェックがオンにされた場合は、送信確認ページに、以下のタグを入れたい
<input type="hidden" name="mail_inquiry" value="お問い合わせ" />
・チェックがオンにされなかった場合は、送信確認ページに以下のタグを入れたい
<input type="hidden" name="mail_inquiry" value="" />
このような場合だと、mail_previewテンプレートのフォーム内に、以下のようなタグを入れれば良いはずです。
<input type="hidden" name="mail_inquiry" value="<MTIfQueryParam name="mail_inquiry" value="お問い合わせ">お問い合わせ</MTIfQueryParam>" />
早速のお返事ありがとうございます。
やってみたんですが、複数設置するとダメとかありますか?
name=""の部分だけ変更したんですが、他二つは反映されないのです。
>chacoさん
こんにちは。
「name="・・・"」だけでなく、「value="・・・"」の部分も、それぞれのチェックボックスに合わせて書き換える必要があります。
すいません。
value=""内のname=""なども書き換えてあります。
<input type="hidden" name="mail_inquiry" value="<MTIfQueryParam name="mail_inquiry" value="お問い合わせ">お問い合わせ>/MTIfQueryParam>" />
<input type="hidden" name="mail_orienteering" value="<MTIfQueryParam name="mail_orienteering" value="オリエンテーリング申込">オリエンテーリング申込>/MTIfQueryParam>" />
<input type="hidden" name="mail_ex" value="<MTIfQueryParam name="mail_ex" value="その他">その他</MTIfQueryParam>" />
>chacoさん
こんにちは。
ここまで来ると、実際のテンプレートを拝見してみないと、原因は分からなさそうです。
>ここまで来ると、実際のテンプレートを拝見してみないと、原因は分からなさそうです。
そうですよね。
ありがとうございました。
自分でがんばってみます。