【追記】
続編の記事「続・PHPテンプレートエンジンを10行で自作する」では、extract() を使用しない、よりシンプルな方法でまとめています。
はじめに
PHPのテンプレートエンジンといえばSmarty(最近ではTwig?)が有名ですが、Smartyの文法や作法をひと通り覚え、それに従う必要があります。しかし、もともとPHPには <?php echo "Hello!"; ?>
というふうに、HTMLへの埋め込み表示機能がありますので、これとinclude文を利用すると、テンプレート表示の仕組みは10行ほどで作れてしまいます。自作テンプレートだとPHPの知識だけで事足りますので、新しいことを覚える必要はありません。
WEB上のファイル構成
Webフォルダ
|
+-- class/
| |
| +-- MyTemplate.class.php
|
+-- template/
| |
| +-- sample.tpl.html
|
+-- sample.php
全部で3ファイルです。上のファイルから順に解説します。
10行テンプレートエンジン
<?php
class MyTemplate
{
function show($tpl_file_path)
{
extract((array)$this);
include($tpl_file_path);
}
}
?>
サンプル画面テンプレートファイル
<html>
<meta charset="utf-8">
<h1>店名:<?php echo $name; ?></h1>
<hr>
<ul>
<?php for($i=0; $i<count($foods); $i++){ ?>
<li><?php echo $foods[$i]; ?></li>
<?php } ?>
</ul>
</html>
このテンプレートファイルはinclude文
で読み込まれるため、お使いのサーバーによっては拡張子を.php
とする必要があります(コメント欄参照)。さくらレンタルサーバーやさくらVPSでは、.html
のままでも問題ありません。
ただ、拡張子が.html
のままだとブラウザーでソースが表示されてしまいますので、留意しておく必要があります。
あと、テンプレートファイル内のPHP処理を for(): ~ endfor
などの代替構文で書く場合もあります。可読性が良くなる反面、「テンプレートは代替構文で」というルールが1つ増えてしまいますので、一長一短ではあります。そこはお好みでどうぞ。
サンプル画面実行ファイル
<?php
include("class/MyTemplate.class.php");
$tpl = new MyTemplate();
$tpl->name = '悟空軒';
$tpl->foods = array('ラーメン', '餃子', '焼き飯', '麻婆豆腐');
$tpl->show('template/sample.tpl.html');
?>
参考URL
(・o・ゞ いじょー。