prefabolic

12345678910111213141516171819202122232425262728293031

no smarty

投稿者:kalibora
投稿日時:2006-02-23 - 01:52:42
カテゴリー:Programming - トラックバック(DISALLOWED (TrackBack))-
たまにはプログラムのことを書いてみる。

phpでSmartyを使うほどでもないけどロジックによってはテンプレートの出し分けしたいなーっていう場合に自分はこんな関数を使ってます。

function display( $tpl, $tpl_vars = null ) {
    if ( defined('DEFAULT_TEMPLATE_DIR') ) {
        if ( substr(DEFAULT_TEMPLATE_DIR, -1) !== DIRECTORY_SEPARATOR ) {
            $tpl = DEFAULT_TEMPLATE_DIR . DIRECTORY_SEPARATOR . $tpl;
        } else {    
            $tpl = DEFAULT_TEMPLATE_DIR . $tpl;
        }
    }
    if ( ! file_exists($tpl) ) {
        trigger_error("'$tpl' is not found", E_USER_ERROR);
    }
    if ( $tpl_vars !== null ) {
        extract($tpl_vars);
    }
    include($tpl);
    exit;
}

呼び出し側はこんな感じ
if ( $isHoge ) {
    display('hoge.tpl', array('msg' => 'hoge'));
} else {
    display('fuga.tpl', array('msg' => 'fuga', 'msg2' => 'foobar'));
}

で、テンプレートはそれぞれこんな感じ。
hoge.tpl
<html>
<head>
<title>hoge.tpl</title>
</head>
<body>
<h1>Hello <?php echo $msg ?> world.</h1>
</body>
</html>

fuga.tpl
<html>
<head>
<title>fuga.tpl</title>
</head>
<body>
<h1>Hello <?php echo $msg ?> world.</h1>
<h2><?php echo $msg2 ?></h2>
</body>
</html>

パフォーマンス優先で機能はあんまりいらない、かつテンプレートの見た目が多少ごちゃついてもいい場合はこんなのでも良いのではと思います。

追記:
テンプレートにバインドする変数が無い時の対応がなかったので
display関数の第2引数のデフォルトを null にした。
それにともない null の時はextractしないように修正。

あとパフォーマンスとかいいつつちゃんとベンチとっていなかったので pear/Benchmark を使ってSmartyと比較してみた。
詳細は手元に無いので書けないんだけど、
上記の関数を使った場合を1とすると・・・
Smarty使用の1回目はキャッシュが生成されてないのでだいたい30倍くらいで、
2回目以降はキャッシュが聞いてるので3倍くらいだった。
適当にやっただけなのであくまで参考値だけどとりあえず遅くなくてよかった。

Comments

ひーで wrote:

おれPHP勉強したいからいろいろ教えてね。
2006-02-23 22:33:25

kalibora wrote:

>ひーで
おー。俺でよければいつでも教えるよー。
2006-02-25 23:07:43

Add Comments

このアイテムは閉鎖されました。このアイテムへのコメントの追加、投票はできません。