メニュー
ブログ更新履歴
コンテンツ更新履歴
リンク
  • 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 のヒアドキュメントは色分けが正しくされなくて見にくくなってしまいますがご了承下さい)

トップ   凍結 差分 バックアップ 複製 名前変更 リロード印刷に適した表示   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom Powered by xpWiki
Counter: 822, today: 3, yesterday: 0
初版日時: 2016-04-18 (月) 22:30:41
最終更新: 2016-04-18 (月) 22:31:27 (JST) (602d) by takatsuka