gen-template-for-perl
TRANSCRIPT
![Page 1: Gen-Template-for-Perl](https://reader031.vdocuments.pub/reader031/viewer/2022020307/55aded931a28ab8e2c8b4575/html5/thumbnails/1.jpg)
HTMLコメント型テンプレートエンジン1.テンプレートエンジンとは 1.1.テンプレートエンジンとは 1.2.テンプレートエンジンの特徴 1.3.既存のテンプレートエンジンの弱点
2. HTMLコメント型テンプレートエンジン 2.1.目的 2.2.特徴 2.3.機能
3.仕様 3.0.記述方法 3.1.メインブロック 3.2.コメント 3.3.データ 3.4.ループ 3.5.IF文 3.6.UNLESS文
![Page 2: Gen-Template-for-Perl](https://reader031.vdocuments.pub/reader031/viewer/2022020307/55aded931a28ab8e2c8b4575/html5/thumbnails/2.jpg)
1.テンプレートエンジンとは
テンプレートエンジンとはテンプレートエンジンとは(ソース元: wikipedia)テンプレートエンジンはテンプレートと呼ばれる雛形と、あるデータモデルで表現される入力データを合成し、成果ドキュメントを出力するソフトウェアまたはソフトウェアコンポーネントである。テンプレートおよび成果ドキュメントは複数のこともある。成果ドキュメントには様々なフォーマットのものがあり、文書・ウェブページ・ソースコードなどがその例で、ドキュメント全体ではなく、その一部を出力することもある。
機能templateと dataをテンプレートエンジンで処理することで結果の文章が得られる
なぜ、テンプレートエンジンを使うのか?
![Page 3: Gen-Template-for-Perl](https://reader031.vdocuments.pub/reader031/viewer/2022020307/55aded931a28ab8e2c8b4575/html5/thumbnails/3.jpg)
1.テンプレートエンジンとは
テンプレートエンジンの特徴テンプレートエンジンを使わないブログラム
#!/usr/bin/perl
# これでページを参照した回数が取得できるとする require(‘tool.pl’) $count = &site_count();
$html = <<EOM; <html> <body> EOM if ($count == 0) { $html .= <<EOM; <div>ようこそはじめまして! </di> EOM } else { $html .= <<EOM; <div>ありがとうございます。 $count回目の訪問ですね!</div> EOM } $html .= <<EOM; </body> </html> EOM # 出力 print $html
テンプレートエンジンを使ったプログラム
<html><body><!--|count|-->はじめまして<!--/|count|/--><!--!count!<!--=count=/回目の訪問ですね<!--/!count!</body></html>
#!/usr/bin/perl
# これでページを参照した回数が取得できるとする require(‘tool.pl’) $data->{‘count’} = &site_count();
require(‘template.pl’) $template = new Template(); $html = $template->create_view(‘view’, $data); print $html;
view.html
ロジックとデザインの分離が出来る
![Page 4: Gen-Template-for-Perl](https://reader031.vdocuments.pub/reader031/viewer/2022020307/55aded931a28ab8e2c8b4575/html5/thumbnails/4.jpg)
やっぱり HTML以外が入るこれでは、 DreamWeaverではおかしくなる可能性がある
1.テンプレートエンジンとは
既存のテンプレートエンジンの弱点
利点 1.ドキュメントが豊富 2.機能が豊富
弱点 1.動作環境に制限がある( Perlの 5.12以上とか) 2.結局テンプレートに HTML以外のものがあるので、 DreamWeaverのようなWYSIWYG系のソフトで、 デフォルトのままでは編集しづらい 3.機能な豊富なので覚える事が多い
<html><body>[% IF count == 0 %]はじめまして[% ELSE %][% count %]回目の訪問ですね[% END %]</body></html>
#!/usr/bin/perl
# これでページを参照した回数が取得できるとする require(‘tool.pl’) $data->{‘count’} = &site_count();
use Template; $template = Template->new(); $template->process(‘view.html’, $data, \$html,); print $html;
view.html
既存の Perl用テンプレートエンジン: Template-Toolkitの場合
やっぱり、 DreamWeaverでも使えるようにしたい!!
![Page 5: Gen-Template-for-Perl](https://reader031.vdocuments.pub/reader031/viewer/2022020307/55aded931a28ab8e2c8b4575/html5/thumbnails/5.jpg)
2. HTMLコメント型テンプレートエンジンHTMLコメント型テンプレートエンジンを
作った目的
1.ロジックとデザインの分離
2. DreamWeaverでも編集出来るテンプレート
3.学習コストを減らす
4.速度
![Page 6: Gen-Template-for-Perl](https://reader031.vdocuments.pub/reader031/viewer/2022020307/55aded931a28ab8e2c8b4575/html5/thumbnails/6.jpg)
2. HTMLコメント型テンプレートエンジンHTMLコメント型テンプレートエンジンの特徴
1.ロジックとデザインの完全な切り離し HTMLのコメントタグを使用した、テンプレートエンジンの実現
2. DreamWeaverでも編集出来るテンプレート HTMLのコメントタグを使用したことで、 HTMLと解釈出来ないタグが、テンプレート上に存在しない
3.学習コストを減らす 機能が少ないので、当然学習コストも低い
4.速度 機能が少ないので、パフォーマンスチェックしていないが、それほど遅くはないはず (しかし、テンプレートキャッシュの機能がないので、キャッシュ機能を保持しているものよりは遅い)
![Page 7: Gen-Template-for-Perl](https://reader031.vdocuments.pub/reader031/viewer/2022020307/55aded931a28ab8e2c8b4575/html5/thumbnails/7.jpg)
2. HTMLコメント型テンプレートエンジンHTMLコメント型テンプレートエンジンの機能1.メインブロック 機能:テンプレートファイルの、使用する箇所を指定するタグ 形式:ブロック形式
記述方法: <!--%main% <!--/%main%/
2.コメント 機能:テンプレートファイルから、ドキュメント生成時に削除する 形式:ブロック形式 記述方法 1 : {{ }} 記述方法 2 : <!--# <!--/#/
3.データ 機能:ドキュメント生成時に、引数にて渡されたオブジェクトのハッシュの値と置き換える 形式:ライン形式
記述方法: <!--=data=/
4.ループ 機能:開始タグから終了タグまでの間をキー値にて渡された配列の回数処理する 形式:ブロック形式
記述方法: <!--~loop~ <!--/~loop~/
5.IF文 機能:渡された判定オブジェクトに「 if_キー値」のメソッドを呼び出し、戻り値が「 1」の場合に表示する 形式:ブロック形式 記述方法: <!--|if| <!--/|if|/
6.UNLESS文 機能:渡された判定オブジェクトに「 if_キー値」のメソッドを呼び出し、戻り値が「 0」の場合に表示する 形式:ブロック形式
記述方法: <!--!unless! <!--/!unless!/
![Page 8: Gen-Template-for-Perl](https://reader031.vdocuments.pub/reader031/viewer/2022020307/55aded931a28ab8e2c8b4575/html5/thumbnails/8.jpg)
3. HTMLコメント型テンプレートエンジンの仕様記述方法
記述ルールは、 【ブロック形式の場合】 開始タグの始め + マーク + [キー値 + マーク ] + 開始タグの終わり 終了タグの終わり + マーク + [キー値 + マーク ] + 終了タグの終わり
<!--#-->ここはコメントなのでテンプレートエンジンを通すと表示されません<!--/#/-->
<!--~loop~/-->ここは繰り返し処理されます<!--/~loop~/-->
開始タグの始め: <!--開始タグの終わり: -->終了タグの始め: <!--/終了タグの終わり: /-->マーク:%(メインブロック ) #(コメント ) =(データ ) ~(ループ ) |(if文 ) !(unless文 )
■ データの場合<!--=data=/-->
記述例)
【ライン形式の場合】 簡易コメント: {{コメントにする文字 }} データ: <!--=キー値 =/-->
■ループの場合 ■コメントの場合
記述例)
![Page 9: Gen-Template-for-Perl](https://reader031.vdocuments.pub/reader031/viewer/2022020307/55aded931a28ab8e2c8b4575/html5/thumbnails/9.jpg)
3. HTMLコメント型テンプレートエンジンの仕様記述例
テンプレートエンジンの使い方
#!/usr/bin/perl
use lib qw(. ./libs);use Gen::Template;
# 条件分岐用クラスpackage Page;sub new{ my $class = shift; bless {}, $class;}
sub if_check{ my ($self, $data) = @_; my $ret = 0; if ($data->{'check'} == 1) { $ret = 1; } return $ret;}
右に続く
■プログラム側
左の続き
package main;use utf8;
# 出力データの生成my %data = ( 'data1' => ' データ ', 'loop1' => [ { 'name' => ' 1つ目です ', 'check' => 1, }, { 'name' => ' 2つ目です ', 'check' => 0, } ]);
# テンプレートファイルの読み込み my $template = Gen::Template->new();my $text = $template->load_template('./test_temp.html', 'utf8');my $page = Page->new();$text = $template->create_view($text, \%data, $page);
print "Content-type: text/html; charset=UTF-8\n\n";$text = $template->convert_encode($text, 'utf8');print $text;
test.cgi
![Page 10: Gen-Template-for-Perl](https://reader031.vdocuments.pub/reader031/viewer/2022020307/55aded931a28ab8e2c8b4575/html5/thumbnails/10.jpg)
3. HTMLコメント型テンプレートエンジンの仕様記述例
テンプレートエンジンの使い方■テンプレート側
test_temp.html
<html><body><h1><!--=data1=/--></h1><!--~loop1~--><!--|check|--><h2>checkが 1の時に表示されます <br><!--=name=/-->:<!--=check=/--></h2><!--/|check|/--><!--!check!--><h3>checkが 1以外の時に表示されます <br><!--=name=/-->:<!--=check=/--></h3><!--/!check!/--><!--/~loop1~/--></body></html>
![Page 11: Gen-Template-for-Perl](https://reader031.vdocuments.pub/reader031/viewer/2022020307/55aded931a28ab8e2c8b4575/html5/thumbnails/11.jpg)
Gen-Template-for-Perl
Github : https://github.com/nasneg/Gen-Template-for-Perl