昨日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_Filesystem(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の方々は実装されているようでした!)のちのちやってみたいなーと。

こちらの記事もどうぞ

  1. [Zend Framework]GoogleMapsViewHelperっぽいのを書いてみた
  2. [Zend Framework]バージョン1.6.2のZend_Cacheを利用してみた
  3. [Zend Framework]Moduleを利用しているアプリで、従属行の取得を試みる