[Perl] => [CGI]


この日記のはてなブックマーク数 このエントリーを含むはてなブックマーク
HTML::Templateを使用すればHTMLファイルをテンプレートから読み込むことができるようになりますので、スクリプトとHTMLを切り離すことができるようになります。HTML::Templateが読み込みテンプレートファイルでは、変数を入れるために以下のようなタグを使用できます。

<TMPL_VAR> <TMPL_LOOP> <TMPL_INCLUDE> <TMPL_IF> <TMPL_ELSE> <TMPL_UNLESS>

#テンプレートタグの使用例 <TMPL_VAR NAME=変数名>

[TMPL_VAR 使用例]
use HTML::Template;


#HTML::Templateオブジェクトの作成。HTML::Templateではテンプレートに
#存在しない変数に値を設定しようとすると、デフォルトでdieするので、
#オプションdie_on_bad_paramsを0にすると便利。
my $template = HTML::Template->new(filename => './template.html', die_on_bad_params => 0);


#HTMLテンプレートに設定されているパラメータを読み込み
my @template_param = $template->param();


#テンプレートの変数それぞれに値を入れる
foreach my $key (@template_param) {
    $template->param( $key => $db_ref->{$key} );
}

#ヘッダーを出力
print $session->header(-charset=>'EUC-JP');

#結果を出力
print $template->output;


[TMPL_LOOP 使用例]
<TMPL_LOOP NAME=trial>
<tr>
<td><TMPL_VAR NAME=cname></td>
<td><TMPL_VAR NAME=company></td>
<td><TMPL_VAR NAME=email></td>
<td><TMPL_VAR NAME=tel></td>
<td><TMPL_VAR NAME=order_date></td>
<td><TMPL_VAR NAME=expire></td>
</tr>
</TMPL_LOOP>

my @trial;
while (my $data = $sth->fetchrow_hashref) {
    push(@trial, $data);
}

my $template = HTML::Template->new(filename => $tmpl_file);
$template->param( 'trial' => \@trial ); #データはリファレンスで渡す
[補足]

FORMのSELECTに関してはTMPL_VARとpopup_menu()を使用するのがもっともよいらしい。TMPL_IFなどでは条件が複雑になるので、逆にソースが見づらくなります。

$template->param( $key => popup_menu(-name => $key, -values => ['Standard', 'Pro'], defalut => $db_ref->{$key}) );


テンプレートにて使用する変数は大文字小文字の区別をしないため、これを区別するようオブジェクトを作成する際に、case_sensitive => 1をセットすることをおすすめします。

[参考記事]

popup_menu - HTMLの選択フィールドを表示する

関連記事
HTML::Template
Apache::ASP
CGI::Session - セッション管理
CGI - ヘッダーを出力する
シェルからCGIにパラメータを渡す
radio_group - ラジオボタンを表示
checkbox_group() - チェックボックスを表示する
エラーをブラウザーに表示するには - CGI::Debug
URLエンコードするには
リダイレクト
popup_menu - HTMLの選択フィールドを表示する
キャッシュを無効にするには
CGI::Cookie - クッキーの取得及び設置
CGIモジュール - フォームの値を取得
広告