PHPテンプレートエンジン PHPiglet
PHPiglet はお手軽に使える個人WEB製作者向けのPHPテンプレートエンジンです。
ちまたではフレームワークが全盛らしいですが、個人でちょこちょこミニサイトを作る際にはお手軽に使えるOneファイルなテンプレートエンジンもいいものです。
PHPigletは10年ほど前にPHPの勉強がてら作ったものですが、なかなか使い勝手もいいのでお気に入りの作品です。
PHPがここまで人気となって、類似品もおそらくたくさんあるのでしょうが、今更ながらの公開とします。
気に入ってくれる方がいればうれしいです。
<?php
require_once("./_czlib/PHPiglet.inc.php");
$objTpl = new PHPiglet();
$objTpl->Assign("TITLE", "czlab");
$objTpl->Assign("SITE_EXPLAIN", "PHP C# Python など");
$objTpl->Assign("HEADER_EXPLAIN", "PHP C# Python など");
// ##### テンプレート領域 #####
$objTpl->Assign("TYPE", "INDEX");
$objTpl->Assign("ROOT_URI", ROOT_URI);
$objTpl->Assign("JS_DIR", JS_DIR);
$objTpl->Assign("IMG_DIR", IMG_DIR);
$objTpl->Assign("CSS_DIR", CSS_DIR);
$objTpl->Assign("SITE_NAME", SITE_NAME);
// メイン領域の設定
$objTpl->SetIncPath("MAIN", "./tpl/index.tpl");
$objTpl->Display("./tpl/_skin.tpl", "index.cache");
PHPigletの基本
以下はSmartyを利用したサンプルです。コードの詳細な意味はともかく、まずは画面に文字を表示するだけのプログラムを作成してみます。
sample/
|
+-- index.php
|
+-- phpiglet/
| |
| +-- PHPiglet.inc.php
|
+-- html/
|
+-- index.html
|
+-- cache/ (書き込み権限が必要)
|
+-- index.cache(PHPigletが生成します)
index.php
<?php
require_once("./phpiglet/PHPiglet.inc.php");
$objTpl = new PHPiglet();
$objTpl->Assign("TEST", "PHPigletサンプル");
$objTpl->Display("./html/index.html");
PHPigletを読み込み(2行目)インスタンスを生成します。(4行目)
TESTというテンプレート内部変数に「PHPigletサンプル」を設定します。(6行目)
“./html/index.html”にあるテンプレートを利用して表示します。(8行目)
以上。簡単ですね^^
/html/index.html
<html>
<head>
<title>サンプル</title>
</head>
<body>
{$TEST}
</body>
</html>
body内の{$TEST}がテンプレート内部変数ですね。
テンプレート内でループ処理を行う
ループ処理のやり方を見ていきましょう。
DBの検索結果やRSS、掲示板など様々な場面で使える必須処理ですね。
やり方は簡単。
PHP側で配列を作ってテンプレートに渡してあげるだけでOKです。
今回はRSSを取得して表示してみましょう。
index.php
<?php
require_once("./phpiglet/PHPiglet.inc.php");
require_once("./lib/MySite.inc.php");
$objTpl = new PHPiglet();
$objMySite = new MySite();
$objTpl->Assign("RSS_LIST", $objMySite->getRss("http://b.hatena.ne.jp/hotentry?mode=rss"));
$objTpl->Display("./html/index.html");
lib/MySite.inc.php
<?php
class MySite
{
function MySite()
{
require_once("XML/RSS.php");
}
function getRss($uri)
{
$rss_data = file_get_contents($uri);
$rss = new XML_RSS();
$rss->setInputString($rss_data);
$rss->parse();
$aList = array();
foreach ($rss->getItems() as $item)
{
$data[title] = $item[title];
$data[link] = $item[link];
$aList[] = $data;
}
return $aList;
}
}
/html/index.html
<html>
<head>
<title>サンプル</title>
</head>
<body>
<ul>
{LOOP RSS_LIST}
<li><a href="{$RSS_LIST/link}">{$RSS_LIST/title}</a></li>
{/LOOP}
</ul>
</body>
</html>



