Smartyで思わず変なトコで引っかかったのでメモ。
テンプレ内で$smarty.const.XXXでPHPでdefineした定数にアクセスできるのはお約束として、
{if $hoge == $smarty.const.DEFINED_VALUE}
{/if}
みたいな条件判定をさせようとしたら、
どう考えても一致しないケースでもなぜか条件クリアしてしまう。
テンプレートキャッシュの中身をみたら
上記の文が
_tpl_vars[‘hoge’] == defined(‘DEFINED_VALUE’) ? DEFINED_VALUE : null ): ?>
とパースされてる。
これはこれでいいんじゃねー?と思ったが
念の為PHP側で一回テストしたらこれがなぜかアウト。
ex. if ($hoge == defined(‘DEFINED_VALUE’) ? DEFINED_VALUE : null ):
hogeに”HOGEHOGE”、define(DEFINE_VALUE,’DEFINE’)
みたいになっててもif文判定クリアしちゃう。
echo defined(‘DEFINED_VALUE’) ? DEFINED_VALUE : null;
ってすると、当然のように設定した文言”DEFINE”が表示。
PHPエンジン側の解釈のタイミング?みたいなので下記のようにする事で一応クリア。
{if $hoge == ($smarty.const.DEFINED_VALUE)}
あわせて、上記PHP側の例の場合
ex. if ($hoge == defined(‘DEFINED_VALUE’) ? DEFINED_VALUE : null ):
これも
ex. if ($hoge == (defined(‘DEFINED_VALUE’) ? DEFINED_VALUE : null) ):
って三項演算子の箇所を括ってやればOKだった。
ちょっと釈然としない気もするけど・・・一応メモ。