ファイルじゃなく、変数に入ってる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)

このブログ記事を参照しているブログ一覧: ファイルじゃなく、変数に入ってるSmartyテンプレートはどうやったら表示できる?

このブログ記事に対するトラックバックURL: http://monolog.spanstyle.com/mt/mt-tb.cgi/334

このサイトについて

自分用リンク

Powered by Movable Type 4.22-ja

PR

このブログ記事について

このページは、ishiiが2005年6月29日 04:14に書いたブログ記事です。

ひとつ前のブログ記事は「isset()およびempty()の返り値メモ」です。

次のブログ記事は「Google EarthはFTTHの夢を見るか?」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

アイテム

  • swfobject.png
  • symfony.png
  • doclean.png
  • clean.png
  • twitterui.png
  • php5.2.8-warning.png
  • pagesaver.png
  • analytics.png
  • Munsell Hue Test.png
  • Munsell Hue Test0.png