目次目次 前のページ前のページ

テンプレートについて

テンプレートとは
テンプレートで使える特別な文字列
時間やアクセス元についての情報を取得する機能
テンプレートを作る上での一般的な注意 [重要]
確認画面テンプレートを作る上での注意 [重要]

テンプレートとは

テンプレートとはHTMLのページや、メールの本文などの「ひな型」となるもので、formdecode.cgi は、この「テンプレート」と、FORM に入力された情報をまとめて、HTML や メールのメッセージ を作り出します。

テンプレートは HTML やメールの文章と同じ普通のテキストファイルです。確認画面で使用する HTML のテンプレートには普通の HTML を書き、送り出すメールのテンプレートには、メール用の普通の文章を書いて下さい。

その時、$VAL{name} や $_DUMPVAR{VAL} などといった文字列を埋め込んでおくと、そこの部分が、FORM に入力された内容にしたがって適宜、置き換わる、というのがテンプレートの機能です。

たとえば、

あなたの名前は $VAL{name} です。
というテンプレートがあり、 "name" という名前の FORM 変数に「朝日太郎」というものが入力されたならば、formdecode は このテンプレートを元に、
あなたの名前は 朝日太郎 です。
というものを作りだします。この $VAL{name} のような文字列として、どのようなものがあるのかを、まず説明します。

テンプレートで使える特別な文字列

警告 これより説明する $...{....} は必ず 1 行以内におさめるようにしてください。複数行にまたがっている場合には、現在の formdecode.cgi では無視されてしまいます。この制限は将来はなくなるかもしれません。

$VAL{変数名}

$VAL{変数名}という文字列が、「変数名」で指定される FORM 変数の入力内容におきかわります。

$_DUMPVAR{VAL}

入力された FORM 変数などをすべて、

<INPUT TYPE="hidden" NAME="FORM変数名" VALUE="FORM変数の内容">
の一覧の形に一気に置き換えます。この機能は、確認画面のテンプレートを作る時に必要になります。詳細は後述します。

注意 { } に囲まれた _all はそのまま記述してください。省略はできません。


$_IF{VAL,変数名,比較値,結果値1,結果値2}

FORM に入力された内容が、ある内容に等しいかどうかを調べ、それによって置き換える内容を切り替えます。

「変数名」の FORM 変数に入力された内容が「比較値」と等しければ「結果値1」に、等しくなければ「結果値2」におきかわります。 たとえば、HTML に

<DT>あなたは納豆が好きですか?<DD>  
<INPUT TYPE="radio" NAME="natto" VALUE="yes">はい  
<INPUT TYPE="radio" NAME="natto" VALUE="no">いいえ
というものを、また、テンプレートに
納豆が$_IF{VAL,natto,yes,好き,嫌い}。
と書いたとします。すると、ユーザが FORM において「はい」を選択すると、FORM 変数 natto の内容は "yes" になるので、テンプレートでは「結果1」の部分、つまり「好き」が選ばれて、formdecode.cgi の処理結果は
納豆が好き。
となります。

「結果2」は省略できます。つまり、$_IF{VAL,natto,yes,納豆が好き} のようにできます。 その場合は、「結果2」に空文字列を指定したものとしてみなされます。

注意 $_SELECT{ の直後の VAL, はそのまま記述してください。省略はできません。


$_SELECT{VAL,変数名,比較値1,結果値1,比較値2,結果値2,....}

$_IF{...} では「〜に等しいかどうか」の「二者択一」の選択になりますが、複数の選択肢がある場合には、この$_SELECT{...}を使ってください。

「変数名」の FORM 変数に入力された内容が「比較値1」と等しければ「結果値1」に、「比較値2」と等しければ「結果値2」に、「比較値3」と等しければ「結果値3」に…、置き換わります。

簡単な例をあげてみます。HTML ファイルに、

あなたの好きな色はどれですか?<UL><LI>
<INPUT TYPE="radio" NAME="color" VALUE="red">赤<LI>
<INPUT TYPE="radio" NAME="color" VALUE="blue">青<LI>
<INPUT TYPE="radio" NAME="color" VALUE="yellow">黄<LI>
<INPUT TYPE="radio" NAME="color" VALUE="white">白<LI>
<INPUT TYPE="radio" NAME="color" VALUE="black">黒</UL>
という FORM を書き、この FORM の _template_confirm_template_mail で指定するテンプレートに、
好きな色は $_SELECT{VAL,color,red,あか,blue,あお,yellow,きいろ,white,しろ,black,くろ} です。
と書いておくとします。 すると、FORM で「blue」のラジオボタンをチェックした場合には、FORM 変数 "color" の内容は "blue" になるので、formdecode.cgi の出力は、
好きな色は あお です。
になります。

注意 $_SELECT{ の直後の VAL, はそのまま記述してください。省略はできません。


$$

テンプレートのなかで、$ (ドル記号) があると、$VAL{..}$_DUMPVAR{VAL}$ と区別がつかなくなることがあります。そこで、単にドル記号を使いたい場合には $$ のように、2 つ続けて並べてください。

テンプレート:

1$$ は 100 円です
結果:
1$ は 100 円です


時間やアクセス元についての情報を取得する機能

フォームに入力された情報だけでなく、フォームへの入力が為された時刻や、どこからアクセスされたのか、などの情報を得るための機能も用意されています。

これは、$VAL{…} の代わりに、$ENV{…}$SYS{…} といった形式の特別な文字列をテンプレートに埋め込むことによって利用することができます。

たとえば、

$ENV{REMOTE_HOST} からのアクセスです
というものをテンプレートに書いておくと、このテンプレートを使ったフォームにdeck.nadesico.nergal.co.jp というコンピュータからアクセスして記入したものは、
deck.nadesico.nergal.co.jp からのアクセスです
というように展開されます。

こういった特別な文字列にどのようなものがあるのかについては、 機能一覧 を参照してください。


テンプレートを作る上での一般的な注意

テンプレートを置く場所について

「!template」というディレクトリを作り、拡張子tplのついたファイルは全てここに置いてください。

-->置き場所

テンプレートファイルの文字コード

文字コードとしては、JIS、EUC日本語コード、ShiftJIS (MS漢字)のいずれでも構いませんが、1 バイトのカナ文字 (いわゆる半角カナ)は使わないようにしてください。文字化けの原因となります。 また、EUC や Shift JIS で作成すると、テンプレートファイルの文字コードの判定に失敗してしまう可能性があります。JIS で作成すると確実ですので、化けるようでしたら、JIS に変換した上でアップロードしてください。

テンプレートファイルの改行コード

改行コードとしては MS-DOS、Windows の CR+LF、Macintosh の CR のみ、UNIX 系 OS の LF のみ、のいずれでも構いませんが、LF のみにしておいたほうが確実です。

ファイル名について

1 バイトの英数字ではじまり、1 バイトの英数字、- (ハイフン)、. (ピリオド)、_ (アンダースコア) の組合せを使った名前のみにしてください。 漢字や空白文字、記号などが混ざっている場合には動作の保証はありません。

FORM 変数名について

FORM 変数は 1 バイトの英数文字の組合せにしてください。特に _ (アンダースコア) で始まる FORM 変数は、このマニュアルで解説しているもの以外は使わないように注意してください。


確認画面テンプレートを作る上での注意

FORM 変数 "_template_confirm" で指定する確認画面のテンプレートでは、formdecode.cgi を呼び出す FORM を含むようにしてください。FORM を含まない場合にはメールは発送されません。

また、その FORM には必ず

$_DUMPVAR{VAL}
を書くようにしてください。そうしなければメールの内容に FORM の内容が含まれなくなります。

例:

<HTML>:
<FORM ACTION="http://cgi.mmjp.or.jp/cgibin/formdecode.cgi" METHOD="post">
$_DUMPVAR{VAL}
<INPUT TYPE="submit" VALUE="OK">
</FORM> :</HTML>


目次目次 前のページ前のページ