gen-template-for-perl

11
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文

Upload: nasneg

Post on 21-Jul-2015

1.348 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Gen-Template-for-Perl

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

1.テンプレートエンジンとは

テンプレートエンジンとはテンプレートエンジンとは(ソース元: wikipedia)テンプレートエンジンはテンプレートと呼ばれる雛形と、あるデータモデルで表現される入力データを合成し、成果ドキュメントを出力するソフトウェアまたはソフトウェアコンポーネントである。テンプレートおよび成果ドキュメントは複数のこともある。成果ドキュメントには様々なフォーマットのものがあり、文書・ウェブページ・ソースコードなどがその例で、ドキュメント全体ではなく、その一部を出力することもある。

機能templateと dataをテンプレートエンジンで処理することで結果の文章が得られる

なぜ、テンプレートエンジンを使うのか?

Page 3: Gen-Template-for-Perl

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

やっぱり 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

2. HTMLコメント型テンプレートエンジンHTMLコメント型テンプレートエンジンを

作った目的

1.ロジックとデザインの分離

2. DreamWeaverでも編集出来るテンプレート

3.学習コストを減らす

4.速度

Page 6: Gen-Template-for-Perl

2. HTMLコメント型テンプレートエンジンHTMLコメント型テンプレートエンジンの特徴

1.ロジックとデザインの完全な切り離し  HTMLのコメントタグを使用した、テンプレートエンジンの実現

2. DreamWeaverでも編集出来るテンプレート  HTMLのコメントタグを使用したことで、 HTMLと解釈出来ないタグが、テンプレート上に存在しない

3.学習コストを減らす 機能が少ないので、当然学習コストも低い

4.速度 機能が少ないので、パフォーマンスチェックしていないが、それほど遅くはないはず (しかし、テンプレートキャッシュの機能がないので、キャッシュ機能を保持しているものよりは遅い)

Page 7: Gen-Template-for-Perl

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

3. HTMLコメント型テンプレートエンジンの仕様記述方法

記述ルールは、 【ブロック形式の場合】  開始タグの始め + マーク +  [キー値 + マーク ] + 開始タグの終わり  終了タグの終わり + マーク +  [キー値 + マーク ] + 終了タグの終わり

<!--#-->ここはコメントなのでテンプレートエンジンを通すと表示されません<!--/#/-->

<!--~loop~/-->ここは繰り返し処理されます<!--/~loop~/-->

開始タグの始め: <!--開始タグの終わり: -->終了タグの始め: <!--/終了タグの終わり: /-->マーク:%(メインブロック )  #(コメント )  =(データ )  ~(ループ )  |(if文 )  !(unless文 )

■ データの場合<!--=data=/-->

記述例)

【ライン形式の場合】 簡易コメント:  {{コメントにする文字 }} データ: <!--=キー値 =/-->

■ループの場合 ■コメントの場合

記述例)

Page 9: Gen-Template-for-Perl

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

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

Gen-Template-for-Perl

Github : https://github.com/nasneg/Gen-Template-for-Perl