使えるシステムから使いたいシステムへ、有限会社アテージ

mustacheはとてもシンプルなテンプレートで、多くの言語で処理エンジンが実装されています。

SmartyJinjaのように多くの機能はありませんが、その分すっきりしたテンプレートになります。

今回はPHPでmustacheを使ってみます。

インストールと準備

そのまま落としてもよいのですが、composerから落とします。以下のcomposer.jsonを作ってcomposer.pharを実行します。

composer.json

以下のディレクトリを作ります。

ディレクトリ 説明
public DocumentRoot
views テンプレートの置き場所
views/partials テンプレートの部品の置き場所
cache キャッシュの保存場所 ※Webサーバーからの書き込みを許可してください。

ここまでで以下のディレクトリ構成になります。

テンプレートの読み込み

プレースホルダのないテンプレートを作ってPHPから読み込んでみます。以下のファイルを作って、index.phpにアクセスしてindex.mustacheがそのまま出力されればOKです。

views/index.mustache

public/index.php

ここで指定したコンストラクタのオプションは、(1)上で作ったディレクトリの指定、(2)テンプレートのロードの方法、(3)特殊文字のエスケープの方法です。テンプレートのロードは、ほとんどの場合、ここで使っているFilesystemLoaderを使うことになると思います。詳細およびその他のオプションは、マニュアルを参照してください。

テンプレートのロード(loadTemplate)の引数は、テンプレートファイルから拡張子を取ったものを指定します。また、テンプレートファオルダにサブフォルダを作ることも可能で、呼び出しは “sub/index” のようにします。

テンプレートの基本

HTMLのテンプレートには少なくても、(1)変数を展開する位置を指定する方法と(2)リストやテーブルを生成するための繰り返し箇所を指定する方法が必要になります。

PHPで展開する変数を1つの配列に詰めて、テンプレートに展開するという方法をとりますが、長々説明するより実例を見たほうが分かりやすいと思います。

views/index.mustache

public/index.php

展開結果

下の配列のように”corp”というキーが重複した場合は、繰り返し部分の中では、内側のものが使われます。

展開結果

もちろん、配列は入れ子にもできます。

views/index.mustache

public/index.php

展開結果

変数は、コンストラクタの’escape’オプションで定義した関数でエスケープされますが、エスケープしたくない場合は、{{{val}}}もしくは{{& val}}とします。

フィルタ

SmartyやJinjaのようにテンプレート側の指定方法がスマートではありませんが、フィルタを書くこともできます。

views/index.mustache

public/index.php

展開結果

部分テンプレートの利用

ヘッダ、フッタ、メニューのように複数ページに渡って使用する部分を部品として独立したテンプレートにして使用することができます。

部品にする部分は、コンストラクタの”partials_loader”オプションで指定したフォルダに入れます。

views/partials/header.mustach

views/index.mustache

部分テンプレートにもタグを組み込めます。主テンプレートに部分プレートを組み込んだ後に変数展開が行われます。

views/partials/header.mustache

public/index.php

機能が少ないですが、HTMLのテンプレートとしては順分使えます。