• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Gen-Template-for-Perl
 

Gen-Template-for-Perl

on

  • 1,220 views

 

Statistics

Views

Total Views
1,220
Views on SlideShare
1,220
Embed Views
0

Actions

Likes
0
Downloads
3
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Gen-Template-for-Perl Gen-Template-for-Perl Presentation Transcript

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