SlideShare une entreprise Scribd logo
1  sur  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文
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-Perl
Github : https://github.com/nasneg/Gen-Template-for-Perl

Contenu connexe

Tendances

脱コピペ!デザイナーにもわかるPHPとWP_Query
脱コピペ!デザイナーにもわかるPHPとWP_Query脱コピペ!デザイナーにもわかるPHPとWP_Query
脱コピペ!デザイナーにもわかるPHPとWP_QueryHidekazu Ishikawa
 
2005 05 21_xoops_xev4_customizing
2005 05 21_xoops_xev4_customizing2005 05 21_xoops_xev4_customizing
2005 05 21_xoops_xev4_customizingTom Hayakawa
 
PHP基本的関数QUIZ
PHP基本的関数QUIZPHP基本的関数QUIZ
PHP基本的関数QUIZWataru Terada
 
知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数Wataru Terada
 
40分濃縮 PHP classの教室
40分濃縮 PHP classの教室40分濃縮 PHP classの教室
40分濃縮 PHP classの教室Yusuke Ando
 
CSS Nite in Matsuyama vol.1 - session 4
CSS Nite in Matsuyama vol.1 - session 4 CSS Nite in Matsuyama vol.1 - session 4
CSS Nite in Matsuyama vol.1 - session 4 arisu yano
 
PHP classの教室
PHP classの教室PHP classの教室
PHP classの教室Yusuke Ando
 
⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5Nishida Kansuke
 
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)Hiroaki KOBAYASHI
 
俺のフックがこんなに簡単なわけがない。
俺のフックがこんなに簡単なわけがない。俺のフックがこんなに簡単なわけがない。
俺のフックがこんなに簡単なわけがない。Hishikawa Takuro
 
HCEでなんちゃってType4のNDEFタグをつくる
HCEでなんちゃってType4のNDEFタグをつくるHCEでなんちゃってType4のNDEFタグをつくる
HCEでなんちゃってType4のNDEFタグをつくるHiroshi Tanaka
 
WordPressと外部APIとの連携
WordPressと外部APIとの連携WordPressと外部APIとの連携
WordPressと外部APIとの連携Hidekazu Ishikawa
 
Type 4 andefを自力で読む
Type 4 andefを自力で読むType 4 andefを自力で読む
Type 4 andefを自力で読むHiroshi Tanaka
 
eZ Publish勉強会9月〜テンプレート言語〜
eZ Publish勉強会9月〜テンプレート言語〜eZ Publish勉強会9月〜テンプレート言語〜
eZ Publish勉強会9月〜テンプレート言語〜ericsagnes
 
WordPress のキャッシュ機構
WordPress のキャッシュ機構WordPress のキャッシュ機構
WordPress のキャッシュ機構katanyan
 
ウェブアプリのセキュリティをちゃんと知ろう (毎週のハンズオン勉強会の資料)
ウェブアプリのセキュリティをちゃんと知ろう (毎週のハンズオン勉強会の資料)ウェブアプリのセキュリティをちゃんと知ろう (毎週のハンズオン勉強会の資料)
ウェブアプリのセキュリティをちゃんと知ろう (毎週のハンズオン勉強会の資料)ひとし あまの
 
Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるMojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるjamadam
 

Tendances (19)

脱コピペ!デザイナーにもわかるPHPとWP_Query
脱コピペ!デザイナーにもわかるPHPとWP_Query脱コピペ!デザイナーにもわかるPHPとWP_Query
脱コピペ!デザイナーにもわかるPHPとWP_Query
 
2005 05 21_xoops_xev4_customizing
2005 05 21_xoops_xev4_customizing2005 05 21_xoops_xev4_customizing
2005 05 21_xoops_xev4_customizing
 
PHP基本的関数QUIZ
PHP基本的関数QUIZPHP基本的関数QUIZ
PHP基本的関数QUIZ
 
Django boodoo
Django boodooDjango boodoo
Django boodoo
 
知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数
 
40分濃縮 PHP classの教室
40分濃縮 PHP classの教室40分濃縮 PHP classの教室
40分濃縮 PHP classの教室
 
CSS Nite in Matsuyama vol.1 - session 4
CSS Nite in Matsuyama vol.1 - session 4 CSS Nite in Matsuyama vol.1 - session 4
CSS Nite in Matsuyama vol.1 - session 4
 
PHP classの教室
PHP classの教室PHP classの教室
PHP classの教室
 
⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5
 
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
 
俺のフックがこんなに簡単なわけがない。
俺のフックがこんなに簡単なわけがない。俺のフックがこんなに簡単なわけがない。
俺のフックがこんなに簡単なわけがない。
 
HCEでなんちゃってType4のNDEFタグをつくる
HCEでなんちゃってType4のNDEFタグをつくるHCEでなんちゃってType4のNDEFタグをつくる
HCEでなんちゃってType4のNDEFタグをつくる
 
WordBeach @kurudrive
WordBeach @kurudriveWordBeach @kurudrive
WordBeach @kurudrive
 
WordPressと外部APIとの連携
WordPressと外部APIとの連携WordPressと外部APIとの連携
WordPressと外部APIとの連携
 
Type 4 andefを自力で読む
Type 4 andefを自力で読むType 4 andefを自力で読む
Type 4 andefを自力で読む
 
eZ Publish勉強会9月〜テンプレート言語〜
eZ Publish勉強会9月〜テンプレート言語〜eZ Publish勉強会9月〜テンプレート言語〜
eZ Publish勉強会9月〜テンプレート言語〜
 
WordPress のキャッシュ機構
WordPress のキャッシュ機構WordPress のキャッシュ機構
WordPress のキャッシュ機構
 
ウェブアプリのセキュリティをちゃんと知ろう (毎週のハンズオン勉強会の資料)
ウェブアプリのセキュリティをちゃんと知ろう (毎週のハンズオン勉強会の資料)ウェブアプリのセキュリティをちゃんと知ろう (毎週のハンズオン勉強会の資料)
ウェブアプリのセキュリティをちゃんと知ろう (毎週のハンズオン勉強会の資料)
 
Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるMojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてる
 

Similaire à Gen-Template-for-Perl

10分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/1210分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/12kenjis
 
FuelPHP Osu Nagoya vol.1
FuelPHP Osu Nagoya vol.1FuelPHP Osu Nagoya vol.1
FuelPHP Osu Nagoya vol.1Fumito Mizuno
 
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1kenjis
 
Ruby on Rails Tutorial
Ruby on Rails TutorialRuby on Rails Tutorial
Ruby on Rails TutorialKen Iiboshi
 
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoyakenjis
 
フラットなPHPからフレームワークへ
フラットなPHPからフレームワークへフラットなPHPからフレームワークへ
フラットなPHPからフレームワークへMasao Maeda
 
フラットなPHPからフレームワークへ
フラットなPHPからフレームワークへ フラットなPHPからフレームワークへ
フラットなPHPからフレームワークへ VOYAGE GROUP
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門Sho A
 
Code Igniterについて
Code IgniterについてCode Igniterについて
Code IgniterについてKeita Ojima
 
<第1回>Laravelハンズオンセミナー
<第1回>Laravelハンズオンセミナー<第1回>Laravelハンズオンセミナー
<第1回>LaravelハンズオンセミナーTatsuyoshi Mashiko
 
Phpcon tokyo 20120_bigginer
Phpcon tokyo 20120_bigginerPhpcon tokyo 20120_bigginer
Phpcon tokyo 20120_bigginerHideo Kashioka
 
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterMasanori Oobayashi
 
Html5 Web Applications
Html5  Web ApplicationsHtml5  Web Applications
Html5 Web Applicationstotty jp
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回Naoyuki Yamada
 
スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門Hisashi HATAKEYAMA
 
【プログラミング教室】テキスト
【プログラミング教室】テキスト【プログラミング教室】テキスト
【プログラミング教室】テキストManabu Ikarashi
 
PHPフレームワーク入門
PHPフレームワーク入門PHPフレームワーク入門
PHPフレームワーク入門Sho A
 
20091030cakephphandson 01
20091030cakephphandson 0120091030cakephphandson 01
20091030cakephphandson 01Yusuke Ando
 
第1回 Magento Cafe Plus Kansai ~ Magentoカスタマイズ入門
第1回 Magento Cafe Plus Kansai ~ Magentoカスタマイズ入門第1回 Magento Cafe Plus Kansai ~ Magentoカスタマイズ入門
第1回 Magento Cafe Plus Kansai ~ Magentoカスタマイズ入門Hirokazu Nishi
 

Similaire à Gen-Template-for-Perl (20)

10分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/1210分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/12
 
FuelPHP Osu Nagoya vol.1
FuelPHP Osu Nagoya vol.1FuelPHP Osu Nagoya vol.1
FuelPHP Osu Nagoya vol.1
 
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
 
Ruby on Rails Tutorial
Ruby on Rails TutorialRuby on Rails Tutorial
Ruby on Rails Tutorial
 
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
 
フラットなPHPからフレームワークへ
フラットなPHPからフレームワークへフラットなPHPからフレームワークへ
フラットなPHPからフレームワークへ
 
フラットなPHPからフレームワークへ
フラットなPHPからフレームワークへ フラットなPHPからフレームワークへ
フラットなPHPからフレームワークへ
 
Ci tutorial
Ci tutorialCi tutorial
Ci tutorial
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門
 
Code Igniterについて
Code IgniterについてCode Igniterについて
Code Igniterについて
 
<第1回>Laravelハンズオンセミナー
<第1回>Laravelハンズオンセミナー<第1回>Laravelハンズオンセミナー
<第1回>Laravelハンズオンセミナー
 
Phpcon tokyo 20120_bigginer
Phpcon tokyo 20120_bigginerPhpcon tokyo 20120_bigginer
Phpcon tokyo 20120_bigginer
 
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniter
 
Html5 Web Applications
Html5  Web ApplicationsHtml5  Web Applications
Html5 Web Applications
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
 
スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門
 
【プログラミング教室】テキスト
【プログラミング教室】テキスト【プログラミング教室】テキスト
【プログラミング教室】テキスト
 
PHPフレームワーク入門
PHPフレームワーク入門PHPフレームワーク入門
PHPフレームワーク入門
 
20091030cakephphandson 01
20091030cakephphandson 0120091030cakephphandson 01
20091030cakephphandson 01
 
第1回 Magento Cafe Plus Kansai ~ Magentoカスタマイズ入門
第1回 Magento Cafe Plus Kansai ~ Magentoカスタマイズ入門第1回 Magento Cafe Plus Kansai ~ Magentoカスタマイズ入門
第1回 Magento Cafe Plus Kansai ~ Magentoカスタマイズ入門
 

Gen-Template-for-Perl

  • 1. 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文
  • 2. 1.テンプレートエンジンとは テンプレートエンジンとは テンプレートエンジンとは(ソース元: wikipedia) テンプレートエンジンはテンプレートと呼ばれる雛形と、あるデータモデルで表現される入力データを合成し、成果ドキ ュメントを出力するソフトウェアまたはソフトウェアコンポーネントである。テンプレートおよび成果ドキュメントは複 数のこともある。成果ドキュメントには様々なフォーマットのものがあり、文書・ウェブページ・ソースコードなどがそ の例で、ドキュメント全体ではなく、その一部を出力することもある。 機能 template と data をテンプレートエンジンで処理することで結果の文章が得 られる なぜ、テンプレートエンジンを使うのか?
  • 3. 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 ロジックとデザインの分離が出来る
  • 4. 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 でも使えるようにしたい!!
  • 5. 2. HTML コメント型テンプレートエンジン HTML コメント型テンプレートエンジンを 作った目的 1.ロジックとデザインの分離 2. DreamWeaver でも編集出来るテンプレート 3.学習コストを減らす 4.速度
  • 6. 2. HTML コメント型テンプレートエンジン HTML コメント型テンプレートエンジンの特徴 1.ロジックとデザインの完全な切り離し   HTML のコメントタグを使用した、テンプレートエンジンの実現 2. DreamWeaver でも編集出来るテンプレート   HTML のコメントタグを使用したことで、 HTML と解釈出来ないタグが、テンプレート上に存在しない 3.学習コストを減らす  機能が少ないので、当然学習コストも低い 4.速度  機能が少ないので、パフォーマンスチェックしていないが、それほど遅くはないはず  (しかし、テンプレートキャッシュの機能がないので、キャッシュ機能を保持しているものよりは遅い)
  • 7. 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!/
  • 8. 3. HTML コメント型テンプレートエンジンの仕様 記述方法 記述ルールは、  【ブロック形式の場合】   開始タグの始め + マーク +  [ キー値 + マーク ]  + 開始タグの終わり   終了タグの終わり + マーク +  [ キー値 + マーク ]  + 終了タグの終わり 記述例) ■ ループの場合 ■ コメントの場合 <!--~loop~/--> <!--#--> ここは繰り返し処理されます ここはコメントなのでテンプレートエンジンを通すと表示されません <!--/~loop~/--> <!--/#/--> 【ライン形式の場合】  簡易コメント:  {{ コメントにする文字 }}  データ: <!--= キー値 =/--> 記述例) ■ データの場合 <!--=data=/--> 開始タグの始め: <!-- 開始タグの終わり: --> 終了タグの始め: <!--/ 終了タグの終わり: /--> マーク: %( メインブロック )   #( コメント )   =( データ )   ~( ループ )   |(if 文 )   !(unless 文 )
  • 9. 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;
  • 10. 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>