ページへ戻る

− Links

 印刷 

技術系備忘録​/PHP​/準備不要のテンプレートエンジン :: シンクリッジ

xpwiki:技術系備忘録/PHP/準備不要のテンプレートエンジン

PHP のテンプレートエンジンといえば smarty が有名なんだと思いますが、最近はあんまり見なくなったような気がします。
昨今の PHP なら標準関数でそれっぽいことが出来るっていうのが大きいんだと思います。

というわけで、PHPの標準機能でこさえたテンプレートエンジンクラスが以下です。

  • テンプレート"ファイル"だけではなく、"文字列"をテンプレートエンジンに食わせたいこともあるだろうと思い、一応用意しています。
  • エスケープ機能も(中途半端かもですが)一応入れてあります。

クラス定義 anchor.png[1]

<?php

class Render
{
	// ファイル名を指定してレンダリングします
	public static function File($templateFile,$params,$escape=false)
    {
		if( $escape ){
			// エスケープ処理。中途半端なので適宜調整のこと。
			$funcEscape = function( $funcEscape, $val )
			{
				if( is_string($val) ){
					$val = htmlentities($val,ENT_QUOTES);
				}elseif( is_array($val) ){
					foreach( $val as $key => &$v ){
						$v = $funcEscape($funcEscape,$v);
					}
				}
				return $val;
			};
			$params = $funcEscape( $funcEscape, $params );
		}

		ob_start();
        extract($params);
        include $templateFile;
        $result = ob_get_contents();
        ob_end_clean();
        return $result;
    }

	// 文字列を渡してレンダリングします
    public static function String($string,$params,$escape=false)
    {
        $filepath = tmpfile();
        fwrite($filepath,$string);
        $metaData = stream_get_meta_data($filepath);
        $result = self::File($metaData['uri'],$params,$escape);
        return $result;
    }

}
Page Top

サンプルコード anchor.png[2]

	// サンプルコード
	$template = <<< EOD
<table border="1">
	<?php foreach(\$data as \$key => \$val ){ ?>
		<tr>
			<td>
				<?php echo \$key; ?>
			</td>
			<td>
				<?php echo \$val; ?>
			</td>
		</tr>
	<?php } ?>
</table>
のゲッツー!
EOD;

	$params['data'] = [ 4=>'遊<br>撃<br>手', 6=>'二<br>塁<br>手', 3=>'一<br>塁<br>手'];
	echo Render::String( $template, $params, false );
	echo Render::String( $template, $params, true );
  • (↑こういうときに PHP のヒアドキュメントは色分けが正しくされなくて見にくくなってしまいますがご了承下さい)

Last-modified: 2016-04-18 (月) 22:31:27 (JST) (2927d) by takatsuka