PHPでsmarty3.1.31を使っていますがおかしな動きに困惑しています。
PHPで
$smarty->assign('val_a', '123');
$smarty->assign('val_b', 'time()',true);
とセットし、テンプレート側で
{$val_a}/{$val_b}
とした場合、$val_aは常に表示されますが、$val_bの方は、初回アクセス時かなにかのときにしか表示されません。
具体的には
1回目アクセス→両方表示される
5秒後くらいにブラウザの再読み込み→{$val_b}が表示されない
となります。
{$val_b|@var_dump}としてみると、nullが入ってることが確認できます。
{$val_a|@var_dump}とした場合、出力される値の横に表示されるパスはtemplates_c内のファイル=コンパイル済みファイルですが、
{$val_b|@var_dump}の方の同様のパスは、cache_dirで設定したキャッシュ済みファイル内のパスとなります。
希望としては、
$smarty->assign('val_b', 'time()',true);
でキャッシュしない変数としてassignした変数は表示のときに計算して表示してほしいのですが、現状、nullとなって表示していません。
smartyのバグなのかと思い、最新の3.1.34に変えて試しても見ましたが結果は同じでした。
なお、キャッシュ済みのファイルの中身を見てみると、
a:123/
b:<?php echo $_smarty_tpl->tpl_vars['val_b']->value;?>
というように、キャッシュするval_aは値として、キャッシュしないval_bは変数のままキャッシュされているのであってるようにも見えますが、どうも期待した動作にはなっていません。
使い方がおかしいのか、他のキャッシュ関連の設定が関連するのかなどわかりましたら教えて下さい。
あなたの回答
tips
プレビュー