ファイルじゃなく、変数に入ってるSmartyテンプレートはどうやったら表示できる?

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みたいだ。

あれ、ひょっとして常識?

トラックバック(0)

このブログ記事を参照しているブログ一覧:

このサイトについて