SmartyテンプレートがDBに保存されてるとして、それをPHP変数に取り込んだ後、どうやって表示しようかと思ったんです。
例えば、
$tmpl =<<<EOF
<html>
<body>
ここはテンプレの中身です。渡されたテンプレート変数$dataの値は{$data}です。
</body>
</html>
EOF;
みたいな感じでSmartyのテンプレートデータが$tmplの中にあるとする。で、ロジックの中にはすでに$tmpl(テンプレート)も$data(テンプレート変数)も存在しているとする。
さて、ここからが問題。このテンプレートおよびテンプレート変数は、どうやったら表示できるんだ?display()やfetch()は、引数にテンプレートファイル名を指定できるけど変数名は指定できないし。
ひょっとしたらdisplay()やfetch()で読み込むためのテンプレートリソースプラグインを作る必要があるのかも?とマニュアルを読んでみたものの、なんだか意味がわからず。で、暫し考えた後に力技で解決できた。
まずは新たにテンプレートファイルを用意して、以下のように書いて保存。
test.tmpl
---------------------
{eval var=$tmpl}
---------------------
そしたらこれでガツンと。
$tmpl = new Smarty;
$tmpl->assign('tmpl', $tmpl);
$tmpl->assign('data', $data);
$tmpl->display('test.tmpl');
つまり、カスタム関数のevalを使うためだけの汎用テンプレートを一つ作って、そこで展開する変数に$tmplを割り当ててしまう。これでOKみたいだ。
あれ、ひょっとして常識?