テンプレートエンジンとは、最終的な出力レイアウトの生成に特化したライブラリであり、プログラム上で生成された値とレイアウト定義ファイル(テンプレート)を結び付けます。
メリット
デザインとロジックの分離を強制できる
テンプレートエンジンを導入すれば、テンプレートエンジンの制約がそのままレイアウトとビジネスロジックとの境界線になるので、分離の基準を強制することができる。
デザイナが必ずしもプログラムを理解している必要がない
テンプレートエンジンの構文仕様は出力に特化しているため、膨大な関数やクラスライブラリを提供するPHPよりも遥かにシンプルです。
出力コードをよりシンプルに記述できる
たとえば、${変数名}と記述するだけで変数値を出力できる。
注目すべきポイント
コンパイル型のエンジンである
キャッシュ技術が充実している
機能が豊富である
モジューラブルな構成を提供する
管理機能が充実している
Smartyは、PHPスクリプトから構成されるライブラリです。特別なインストーラはなく、必要なスクリプトファイルを所定のディレクトリーに配置するだけで利用できます。
インストールファイルをダウンロード
http://smarty.net からダウンロードできます。
ファイルを展開する
サーバにアップロードして、展開してください。
tar zxvf Smarty-xxxxxx
展開後のディレクトリー名をsmartyに変更します。
テンプレート/キャッシュファイル用のディレクトリー作成
以下のディレクトリーを作成します。
templates: テンプレートファイルの保存先
templates_c: コンパイル済みテンプレートの保存先
cache: キャッシュファイルの保存先
templates_cとcacheディレクトリーにたいしては、書き込み権限をあらかじめ与えておく必要があります。ディレクトリーの属性を(707)としてください。
Smarthの中核機能を担うのは、Smartyクラスです。
テンプレートエンジンの挙動は、Smartyクラスの各プロパティを設定することで制御できます。
テンプレートファイルの格納場所を指定したり、コンパイル済みのテンプレートの格納先を指定したりします。
さらに、下記の例ではassignメソッドを使用してテンプレートの変数を設定しています。テンプレート変数とは、テンプレートファイルから参照可能な変数のことを言います。最後にdisplayメソッドで表示したいテンプレートファイルを呼び出して完了します。
<?php
require_once('./libs/Smarty.class.php');
$o_smarty = new Smarty();
$o_smarty->template_dir = './templates/';
$o_smarty->compile_dir = './templates_c/';
$o_smarty->assign('name','Aya');
$o_smarty->display('helloSmarty.tpl');
?>
helloSmarty.tpl
<html>
<head>
<title>Rynn</title>
</head>
<body>
Hello, {$name}!!
</body>
</html>
テンプレートファイルの構造について説明します。
テンプレートファイルは次のような要素から構成されます。
- 変数
{$変数名}の形式で表すことができます。
変数は、PHPスクリプトから生成された「テンプレート変数」とSmartyが内部的に生成する「予約変数」とに分類されます。
テンプレート変数は、さらにスカラ値、単純配列、連想配列、オブジャクトに分類することができます。
変数式 |
意味 |
{$foo}
|
スカラfooの値
|
{$foo[0]}
|
単純配列fooの0番目の要素
|
{$foo.bar}
|
連想配列fooのbarの要素
|
{$foo->bar}
|
オブジェクトfooのbarプロパティ
|
{$foo->getBar()}
|
オブジェクトfooのgetBarメソッド
|
予約変数{$smarty}は、Smartyによって自動的に割り当てられる変数であり、この予約変数の確保するためにPHPスクリプトを記述する必要はありません。
以下にその1部を紹介いたします。
予約変数{$smarty}を介して取得できる情報
構文 |
概要 |
{$smarty.get.パラメータ名}
|
クエリ情報($_GETに相当)
|
{$smarty.post.パラメータ名}
|
ポストデータ($_POSTに相当)
|
{$smarty.config.パラメータ名}
|
設定ファイルの値
|
{$smarty.const.定数}
|
PHP定数の値
|
{$smarty.foreach.ループ名.変数名}
|
{foreach}ループの情報({foreach}~{foreach}内のみ使用可能)
|
- 変数の修飾子(Variable Modifiers)
変数や関数の戻り値を加工するための簡易命令です。
{$変数名|修飾子[:"パラメータ"[:...]}
簡単な文字列の加工を行ったり、変数の構成情報(文字列長やパラグラフの数など)をテンプレート上で取得/表示するために用います。
Smartyで利用できる主な修飾子
修飾子 |
概要 |
cat:"文字列"
|
指定された文字列を連結
|
regex_replace:"置換前":"置換後"
|
置き換え(正規表現対応)
|
string_format:"フォーマット文字列"
|
文字列のフォーマッティング
|
strip_tags
|
タグの除去
|
nl2br
|
改行文字を<br />タグに変換
|
- 関数(Funcitons)
条件分岐や繰り返し処理、外部テンプレート/設定ファイルのインポートなど、テンプレートの挙動を制御するたもの基本機能を提供します。
{関数[属性1="値1" [...]]}~[/関数}
関数は、配下にコンテンツを持たない「テンプレート関数」と配下にコンテンツを持つ「ブロック関数」とに分類できます。
また、ほとんどの関数にはそれ自身の動作を制御するための補助的なパラメータがあります。
これを「属性」と言い、属性には「数値」、「文字列」、「true/false」、「変数が混在する動的な値」を指定することができます。
それぞれの型に応じて属性の表記が微妙に異なるので、注意が必要です。
データ型に応じた属性の記述方法
関数 |
概要 |
assign
|
テンプレートに値をセット
|
if
|
条件分岐
|
foreach
|
指定された変数について繰り返し処理
|
include
|
外部テンプレートをインクルード
|
strip
|
出力から空白を除去
|
- 演算子(Math)
テンプレートファイルでは、PHPで利用可能な演算子を用いて、変数値に対して演算処理を行うことが可能です。
一般的な代数演算子のほか、{if}関数では比較演算子を利用することができます。
- コメント(Comment)
{*~*}で囲まれたブロックを指します。コメントブロックには、テンプレートエンジンの解析対象とならない備考やメモ情報を記述します。