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>
Powered by WordPress | Designed by: video games | Thanks to Sicherheitsdienst, Trucks and SUV