PHPテンプレートエンジン HtmlTemplate for PHP

HTML template for PHP は軽量なphpのテンプレートエンジンです。

htmltemplate.inc ファイル1つで実装できてとってもお手軽。
テンプレートの書き方もシンプルでわかりやすいです。
機能は置換->表示、分岐、繰り返しのみで、とてもシンプルです。

元々は作者(Hiroshi Ayukawaさん)のサイト(PHP開発日誌)で配布されていたのですが、今は閉鎖されています。
作者の方によるバージョンアップはされていないようです。(最終更新が2003年)

現在は、SouceForgeで配布されています。ライセンスはBSDとあります。(ファイルにはArtistic License version 2.0って書いてあるど)
PHP4とPHP5用があります。PHP4用しか使ったことないです。

使い方のメモ

簡単な使い方

PHP側
$data_1 = 'あいうえお';
$data_2 = array(
		'data_a'=>'AAAA',
		'data_b'=>'BBBB'
		);

tmpl_src = array(
                 'data_1'=>$data_1,
                 'data_2'=>$data_2);

htmltemplate::t_include('tmplname.html', $tmpl_src);
		
テンプレート側
<html>
~省略~

<p>データ1:{val data_1}</p>
<p>
データ2-A:{val data_2/data_b}<br />
データ2-B:{val data_2/data_b}
</p>

~省略~
</html>
		
出力結果
<html>
~省略~

<p>データ1:あいうえお</p>
<p>データ2:abcde</p>

~省略~
</html>
		

API


htmltemplate::t_include(テンプレートファイルのパス, テンプレートに渡す変数);
テンプレートを指定して、適用後、画面に出力する。
テンプレートファイルの拡張子はなんでもよい。

htmltemplate::t_buffer(テンプレートファイルのパス, テンプレートに渡す変数);
htmltemplate::t_buffer(テンプレートファイルのパス, テンプレートに渡す変数);
テンプレートを指定して、適用後の出力結果を返す。
画面に出力は行わないので、出力結果を加工しい場合に使用。

テンプレートタグ

データ出力
{val 連想配列のキー}

改行コードを<br />に変換して出力
<p>{val data_1}</p>
{rval 連想配列のキー}

改行コードを変換せずそのまま出力
<p>{rval data_1}</p>
条件分岐
<!--{def 連想配列のキー}--> ~ <!--{/def}-->

空でない場合(空でない配列または空でない文字列)に出力する

<!--{def val_1}-->
<p>val_1 は空ではない</p>
<!--{/def}-->
		
<!--{ndef 連想配列のキー}--> ~ <!--{/ndef}-->

空の場合(空の配列または空の文字列)に出力する
※def と組み合わせれば、if~else 文を作れる

<!--{ndef val_1}-->
<p>val_1 は空</p>
<!--{/ndef}-->
		
<!--{vdef 連想配列のキー}--> ~ <!--{/vdef}-->

defの条件かつ、0またはfalseでない場合に出力

<!--{vdef val_1}-->
<p>val_1 は空ではなく0でもfalseでもない</p>
<!--{/vdef}-->
		
繰り返し
<!--{each 連想配列のキー}--> ~ <!--{/each}-->

繰り返す対象の配列は、連想配列ではないインデックスが数値の配列のみ対応。

for($i=0; $i<10; $i++){
    $ary[] = array('ary_1'=>'val)
    }

tmpl_data = array(
                 'data1'=>array(
                                'val_a'=>$a,
                                'val_b'=>$b),
                 'data2'=>$data_2);
		
<!--{each values}-->
<p>
    配列の値はこのように
    {val values/val_1}
    {val values/val_2}

    入れ子もできます
    <!--{each values/val_values}-->
    {val values/val_values/val_1}
    {val values/val_values/val_2}
    <!--{each}-->
</p>
<!--{each}-->
		

条件分岐・繰り返しのコメントで囲まれたテンプレートタグを使う場合は、 - と { 、 } と - の間にスペース・タブ・改行等を入れてはいけません。
○ 正しい:
<!--{def val1}-->

× 間違い:
<!-- {def val1} -->

<!–
{def val}
–>

コメント・トラックバック

コメントを送る
※は入力必須です。コメントは管理者の承認後に表示されます。