2017年7月13日木曜日

smarty2でも、メモリからテンプレートを読み込めます

smarty2はデフォルトでメモリからの読み込みに対応していないので、あきらめている人を多く見かけますよね。

でも、方法がちゃんと用意されているのですよ。

ほんのちょっとコードを書くだけです。 プラグインとしてね。

公式ドキュメント http://www.smarty.net/docsv2/ja/plugins.resources.tpl
これでさくっと完成します。

Exampleをコピペしてプラグインとして読み込み、システムにあったコーディングをするだけです。

smarty_resource_db_sourceとsmarty_resource_db_timestampのみ書き換えで、後の2つはダミーです。(使わないけど書かないといけないだけ)

メモリから読み込みなので dbではなくmemoryにしましょう。
smarty_resource_memory_source というように。 残る3つも同様にです。

smartyに渡すファイル名のフォーマットは、「type:filename」です。
通常はtypeを省略していますよね。 省略するとtype は file になります。

今回の例では、「memory:filename」にしてあげれば、プラグイン側の処理をしてくれます。
filenameは、使わなければダミー値を与えればよいです。

あとは、smartyオブジェクトにテンプレート内容を渡してあげれば完成です。
$smarty->templateSource = テンプレート内容;

この場合のsmarty_resource_db_source()の内容例としては

$tpl_source = $smarty->templateSource;
return true;

この2行にするだけで動きます。
smartyをシステムに組み込んでいる人なら朝飯前だと思います。