すぐ分かるテンプレートエンジン Smarty

PHP

Smarty は PHP で使用できるテンプレートエンジンです。

PHP は HTML を混ぜて記述できますが、その便利さのおかげでロジック部分とデザイン部分が混合してしまいます。一人でやる分にはそれでいいのですが、混合しているとプログラマとデザイナで作業を分担することが出来ません。そこで登場するのがテンプレートエンジン Smarty です。

Smarty を使うのは簡単です。基本的な流れとして、ロジックを書いた PHP ファイルと、デザインを書いたテンプレート HTML ファイルを作成します。

PHP ファイルには、Smarty ライブラリを include して、そこにユーザに見せる値とか、データベースから SELECT した内容などを登録します。一方、テンプレート(HTML)には、デザインを書いて、値を嵌め込めば OK です。また、if/for/foreach 文も記述できます。

では、実際に使ってみます。

Smarty の環境準備

PHP の環境は、ローカル環境 MAMP で用意しています。

Smarty の公式サイト からライブラリをダウンロードします。解凍して、その中の lib フォルダを作業ディレクトリに置きます。

また、作業ディレクトに templates, templates_c フォルダ、sample.php を置きます。また、templates フォルダ以下に sample.html を置きます。templates_c フォルダは、キャッシュファイルが自動で格納される場所です。このキャッシュファイルはコンパイル結果が格納されており、これが再利用されます。サーバーで実行する場合、ディレクトリに書き込み権限を与える必要があります。

簡単なコードで Smarty を使う

では、ロジック部分に当たる sample.php に以下の内容を記述します。

$smarty にファイルの場所を教えて、assign で変数名(hello)に値(Hello World)を割り当て、テンプレートファイルを表示(display)させています。ここには html タグなどは記述しません。

<?php

require_once("libs/Smarty.class.php");

$smarty = new Smarty();
$smarty->template_dir = "templates/";
$smarty->compile_dir = "templates_c/";

// 変数
$smarty->assign("hello", "Hello World!");

// 配列
$objects = array("北海道", "青森県", "秋田県", "岩手県", "山形県");
$smarty->assign("objects", $objects);

// テンプレートファイルを読み込む
$smarty->display('sample.html');

?>

次に、テンプレート部分に当たる sample.html に以下の内容を記述します。

先ほど登録した値を {$変数名} で呼び出します。foreach も PHP とは異なる書き方ですが、テンプレートファイル内で使用できます。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>

{$hello}

  {foreach $objects as $object}
  * {$object}
  {/foreach}

</body>
</html>

sample.php をブラウザから確認すると以下のように表示されます。ロジック部分とテンプレート部分を綺麗に分離したコードがうまく動作しているのが確認できます。

以上、テンプレートエンジン Smarty の環境準備/簡単なコードによる動作を紹介しました。