同じ名前のリソースを切り替えて使う

resource.var.phpを使って問題になったのは,ループとかで同じ名前の変数使うと読み出す度にコンパイルしないと内容が同じになっちゃうこと.これはfetchの引数で解決が簡単にできた

これもそのまんまマニュアルに書いてある(fetch() | Smarty)ので,書く必要はないような気はする.解決方法は2番目3番目の引数としてcache_id, compile_idを内容ごとにユニークなものをつけてやればok.cache_idとcompile_idは被ってても大丈夫だと思う(思うと書いたのは試してないから.現在修正してるシステムはSmartyのcache使ってない!!!)

foreach ($templates as $num => $template) {
    $body_tpl = $template['body'];
    $body = $Smarty->fetch('var:body_tpl','template_id_'.$num , '$template_id_'.$num);
}

あとはtemplateの中身保存するときに、clear_compiled_tplメソッドでコンパイル済みのテンプレートを消しとけば読み込み時に再生成してくれるはず.同時にコンパイル済みのテンプレート作ると読み込まれてない変数あったらおかしくなりそうなのでやってない