目次
フレームワークに依存しないPHP テンプレートエンジン Smarty
特定のフレームワークに依存しない「汎用」テンプレートです。
縛りが少なくて、使いやすくて、高機能なので僕は気に入ってます。
各言語のマニュアルが整備されているのもありがたいです。
2022/07/31時点では最新バージョンの日本語版はありませんが、ほどなく整備されるでしょうし、よほど凝った使い方をしない限り、ひとつ前のバージョンのマニュアルでも困らないはずです。
インストール
こちらから最新版をダウンロード・解凍します。
解凍したフォルダ(例えばバージョン4.1.1なら「smarty-4.1.1」)ごと、PHPから参照できるフォルダにコピーするだけです。
特にこのフォルダでないとダメという縛りはありません。
Smartyを使う本当の最低限
PHPがSmartyを見つけられるように「'SMARTY_DIR」定数に置いた場所を指定します。
例えば、「c:/webroot/libs」フォルダに「Smarty」にフォルダをリネームしてコピーしたなら、Smartyフォルダの下の「libs」の位置を定数で定義する形になります。
PHP.iniに定義してもいいのですが、通常、システム管理者がサーバーを管理しているとPHP.iniの変更は勝手にさせてもらえないので、こうしてます。
そのうえで、以下のようにしとけば大丈夫です。
ここまでできたら、Smartyを使う最低限は、以下の4行です。
(パスの部分はサンプルです)
define('SMARTY_DIR', 'C:/webwork/core/smarty/libs/');
require_once SMARTY_DIR . 'Smarty.class.php';
$smarty = new Smarty();
$smarty->display('C:/webwork/views/demo.html');
ようするに。
クラスを「new」して、テンプレートファイルのパスを指定して「$smarty->display」すればいいです。
もちろん表示するHTMLファイルは用意しないといけないです。
テンプレートファイルはサンプルとかでは「.tpl」のような拡張子になっていることが多いですが、別に上記のように普通に「.html」とかにしてても問題ないです。
変数・配列・連想配列の値をHTML側に渡す
$smarty->assign
を使います。
HTML側で渡された変数の値を表示する場合は「{$str_title}」みたいに「{ }」で囲んで変数名の頭に「$」をつけます。
例えば、PHP側で
$smarty->assign('str_title', 'Smartyのサンプル');
としたものは、HTML側では
<h1>{$str_title}</h1>
で表示できるというわけです。
配列でも同じです。
例えば、PHP側で
$arr_arr = array('テスト 次郎', 'second@mail.example.com');
$smarty->assign('arr_arr', $arr_arr);
のように配列を定義して、名前をつけてassignすれば
HTML側では
<p>{$arr_arr[0]}</p>
<p>{$arr_arr[1]}</p>
みたいにすれば表示できます。
連想配列でも同じようにできます。
PHP側で
$dic_arr = array('str_name' => 'テスト 太郎',
'str_email' => 'addr@mail.example.com',
'dic_phone' => '080-444-3333');
$smarty->assign('dic_arr', $dic_arr);
のように連想配列を定義して、名前をつけて渡せば、HTML側では
<p>{$dic_arr.str_name}</p>
<p>{$dic_arr.str_email}</p>
<p>{$dic_arr.dic_phone}</p>
のように、「.」で連想配列のキー名をつけてやれば表示できます。
配列をうけてHTML側でループ処理
配列を受け取ったとき、添え字を直接指定するなんてことは普通しません。
配列を受けとる=配列にはいっているだけループで回す・・ってのが普通です。
ループにはいくつか方法がありますが、とりあえず「foreach」が便利です。
上記の配列の場合だと
<ul>
{foreach $arr_arr as $val}
<li>{$val}</li>
{/foreach}
</ul>
みたいにすれば配列の値すべてを表示できます。
連想配列も同じようにできます。
連想配列のキーの値を取得したい場合は「@key」を以下のように使います。
<ol>
{foreach $dic_arr as $value}
<li>{$value@key}:{$value}</li>
{/foreach}
</ol>
foreachはもちろんネストもできます。
とっつきやすくて奥が深いのがSmarty
今回紹介した最低限(変数の参照とループだけ)でも結構なことができます。
簡単な画面は作れますしね
なんですが。
マニュアルを読めばわかるとおり、Smartyは実に多機能でもあります。
このブログで紹介した基本中の基本をとりあえず使ってみて、それだけでできないことがでてきたらマニュアルを調べる・・感じで学習しやすいテンプレートエンジンだと僕は思ってます。
最近、有名フレームワークで採用されているテンプレートエンジンばかり前面にでてきて、Smartyの影が薄くなっている感じがしたので、いまさらながら・・と思いつつ紹介です。
ではでは。