メニュー
ブログ更新履歴
コンテンツ更新履歴
リンク
  • Magome
  • クラウドベースのMIDIシーケンサ
    音楽制作に興味のある方を対象に、スタンドアロンでも使え、ネットならではの面白さも兼ね備えた音楽制作アプリの提供を目指しています。
twitter

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

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

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

クラス定義 anchor.png

<?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

	// サンプルコード
	$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 のヒアドキュメントは色分けが正しくされなくて見にくくなってしまいますがご了承下さい)

Front page   Freeze Diff Backup Copy Rename ReloadPrint View   New Page Page list Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom) Powered by xpWiki
Counter: 1563, today: 1, yesterday: 5
Princeps date: 2016-04-18 (Mon) 22:30:41
Last-modified: 2016-04-18 (Mon) 22:31:27 (JST) (1184d) by takatsuka