Template Toolkit に関するメモ(2002/07/16)
動的なHTMLファイルをプログラムから作成する場合に困る点として、デザイン部のHTMLと、プログラム制御を行うHTMLの記述を分離して別々に作業したいと言う点があげられます。特に困ることは、プログラマは、デザインに弱く、デザイナーはプログラムに弱いという事・・・・
問題解決として考えられる事は、「動的なHTMLでも静的な部分が多数ある」という事を考えた場合、動的になりうる箇所の全ては、プログラム変数により置換え可能であること。ということは、HTMLファイルの中にプログラム変数を設定し操作するプログラムを作ってしまえば良いのでは?
と考えるのは、世界中沢山いるようで、すでにすごいいい物がありました。というより、そう言う事をするのが「テンプレートライブラリ」って言うのですよ。でもって、今回はその中でもピカ1の、Template-Toolkit を使ってみますね。
参考 : Template-Toolkit
参考 : HTML::Template
資料 : TTテンプレートサンプル
資料 : TTテンプレート構文
凄い! の一言です。テンプレートライブラリとして、変数の置換えは元より、ループ制御・分岐(if)・多分岐(swtchi)・例外(try)、プラグイン等々の機能をもっています。逆に言うと機能が豊富すぎて使いこなせるのか?ってなりますがね。
あと便利なのは、メールの文面等を作成するときにも便利ということ。これは、HTML::Template にも言える事ですが、テンプレートライブラリ制御を行う構文を書くと余分な改行が出力されてしまい、メール(平文)にすると、その改行を取るプログラムを作らないといけないのですが、Template-ToolKit は、その点を考慮しているので、便利に使えます。
1.CPAN からソースをもってきて、インストールします。
% cd /opt/loca/src
% wget http://www.cpan.org/modules/by-module/Template/Template-Toolkit-2.08.tar.gz
% gzip -cd Template-Toolkit-2.08.tar.gz | tar xf -
% cd Template-Toolkit-2.08
% perl Makefile.PL
% make
※質問攻めにあいます
% su
# make install
Can't locate AppConfig.pm in @INC (@INC contains: blib/lib blib/arch /usr/local/lib/perl5/5.6.1/i86p
c-solaris /usr/local/lib/perl5/5.6.1 /usr/local/lib/perl5/site_perl/5.6.1/i86pc-solaris /usr/local/l
ib/perl5/site_perl/5.6.1 /usr/local/lib/perl5/site_perl .) at bin/ttree line 32.
BEGIN failed--compilation aborted at bin/ttree line 32.
make: *** [tt2_html_docs] Error 2★.「AppConfig.pm」が無いとコンパイルエラーが・・・・と。その他にも・・・
2.CPAN からソースをもってきて、インストールします。
% wget http://www.cpan.org/modules/by-module/AppConfig/AppConfig-1.52.tar.gz
% gzip -cd AppConfig-1.52.tar.gz | tar xf -
% cd AppConfig-1.52
% perl Makefile.PL
% make
% su
# make install3.その他の必須モジュール
4.さいど、・・・・ Template-Toolkit をコンパイル!
1.こんな感じでPerlプログラムを作って。(sample.pl)
#!/usr/local/bin/perl
use strict;
use Template;
my @people = (
{
name => 'Larry Wall',
language => 'Perl',
},
{
name => 'まつもとゆきひろ',
language => 'Ruby',
},
{
name => 'James Gosling',
language => 'Java',
}
);
my $template = Template->new;
my $output;
$template->process(
'sample.html',
{ people => \@people },
\$output,
);
print $output;2.sample.html ですたい (^v^)
<html>
<body>
[% FOREACH p = people -%]
[% p.language %] is made by [% p.name %].<br>
[% IF p.language == 'Java' -%]
bbbb
[% END -%]
[% END -%]
</body>
</html>3.実行してみると
% ./sample.pl
<html>
<body>
Perl is made by Larry Wall.<br>
Ruby is made by まつもとゆきひろ.<br>
Java is made by James Gosling.<br>
bbbb
</body>
</html>