なにやら話題のテンプレートエンジン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の方々は実装されているようでした!)のちのちやってみたいなーと。