Nullyのぶろぐ

仙台から東京へ転勤したエンジニアのブログ

なにやら話題のテンプレートエンジンTwigを使ってみた

昨日IRC#zftalk-jaにてTwigいいよTwigという話題があったので私も勉強がてら使ってみました。

公式ドキュメントに書いてある事をつらつらやっていますので、Twigに精通している方々にはつまらないかもしれないですが...。

準備

まずはTwig公式からファイルを拾ってきます。

INSTALL NOWというリンクから拾えます。

インストール対応形式はzip、SubVersion、Git、PEARのようです。

環境によって適切(扱い易いもの)をインストールして下さい。

今回は初めてということで、zipファイルからインストールしてみたいと思います。

ダウンロードが完了したら、展開して、PHP5.2.4が動く環境にtest/twigを作ります。

次に「test/twig」以下に「tpl」フォルダを作ります。これはテンプレートを格納するフォルダです。

次に「test/twig」以下に「cache」フォルダを作ります。これはテンプレートのキャッシュを格納するフォルダです。

展開したファイルの中にある、「lib/Twig」フォルダを「test/twig」にコピーします。

コピーが完了したら、「test/twig」フォルダにindex.phpを作ります。

ここまでで準備が完了です。

PHPが動く環境は個々によって違うので、曖昧に説明しました...。

ごめんなさい...。

書いてみる

先程作成したindex.phpに、以下のコードを書いてみます。

 

set_include_path(dirname(__FILE__). "/");

require_once "Twig/Autoloader.php";

// autoloaderの登録

Twig_Autoloader::register();

// テンプレートを使って出力します

$loader = new Twig_Loader_uploadsystem(dirname(__FILE__). "/");

$twig = new Twig_Environment($loader, array(

"cache" => dirname(__FILE__). "/cache", // キャッシュフォルダの指定 使わなければfalseなどにしておく(記述しなくてもOK)

"auto_reload" => true // キャッシュの再構築の指定 デフォルトはfalse

));

// 指定したパスからテンプレートを読み込みます

$template = $twig->loadTemplate("index.html");

// テンプレートを吐き出します

$template->display(array(

"baseTitle" => "TwigTest", // ページのタイトルのセット

"navigation" => array( // ナビゲーションのリンク先などのセット

array(

"href" => "/",

"caption" => "home"

),

array(

"href" => "/#company",

"caption" => "company"

)

)

));

 

ここまでで表示するための下準備が完了しました。

次に、吐き出すための「index.html」を準備します。

「test/twig/tpl」以下に「index.html」を作成し、以下のようなHTMLを書きます。

 

{{ baseTitle }}

<h1>My Webpage</h1>

{% for item in navigation %}

<li><a href="{{ item.location }}">{{ item.caption }}</a></li>

{% endfor %}

 

簡易的なHTMLですが、これでindex.phpで指定した値が表示されるようになります。

ここで「{{}}」と「{%%}」の違いをば。

自分の中での解釈ですが、恐らく「{%%}」で囲われた箇所は、Twigでテンプレートを解釈する際に、登録されているTokenの内容を記述する場所なのかなーと思いました。(まだドキュメントを完全に読んでないのでこの程度でしか...)

で、「{{}}」は、display()関数にて登録した変数の内容を出力してくれる囲いなのかなーと。

Smartyだと、どんな時でも{}で囲ってあげ、「|(パイプ記号)」で連結してあげればフィルタリングも可能でしたが、Twigはループするときはこっち!とか指定があるので解析も早いのかなーとも思います。(PHP5.2.x系以上だからってのもあるのでしょうけども...。)

表示結果

多分表示結果はこんな感じにナルト思います。

感想

早い!

ちょこっとした内容しかやってないからちょー早く感じるのかもしれませんが、多分早いです。

あと、HTMLソースが意外と綺麗に出力されていることに感動しました。

あと、キャッシュ作ってみた時にキャッシュファイルの内容を見たら、実はクラスだったという事にも新鮮さが有りました。

SmartyはHTMLを直接吐き出してそいつをキャッシュとして利用している(はず)のでなおさらでしたw

後でやってみたい

Zend FrameworkのViewとして組み込めるんじゃないか!とか思っているので(すでにIRC#zftalk-jaの方々は実装されているようでした!)のちのちやってみたいなーと。