最近、まじめにsmartyをしっかり使おうと思いはじめたんだけど・・・

smartyデバッグを使おうとしたら

Parse error: parse error, unexpected '(', expecting T_STRING or T_VARIABLE or '$' in (debug.tpl.phpのパス)debug.tpl.php on line 10

というエラーが出てた。手持ちのバージョンはsmarty2.6.9。そんなに変な事したつもりはないのであまりめずらしい現象ではないと思うんだけど。自分用のメモと言う意味も含めてメモ。


http://xoops.peak.ne.jp/modules/d3forum/index.php?post_id=3052


によると、default_modifiersを設定している状態で、テンプレート中にissetがあると発生するのかな?


ありえる状況として

$smarty->debugging_ctrl = 'URL';

して、SMARTY_DEBUGすると、上記のエラーがでる。
どんな対策ができるか。


まあ、
http://xoops.peak.ne.jp/modules/d3forum/index.php?post_id=3052
にある通り、issetを使っている場所に"|smarty:nodefaults"を設定するのが簡単かな。


あとは、issetを使わないテンプレートにするっていう手もあるか。
debug.tplをissetなしで作るのもめんどくさそうだけど・・・。
debug.tplの変わりにprint_rとかprint_a(どこかで見つけたライブラリだったと思う)とかでもいいのかな?


あとは、テストサーバでは、default_modifiersを設定しないっていう手も。
本番サーバでは
$smarty->debugging_ctrl = 'URL';
を設定するはずもないので、テストサーバにディプロイした場合は

$smarty->debugging_ctrl = 'URL';

して、本番サーバにディプロイした場合は、

$smarty->default_modifiers=array('escape:"html"');

という風に設定を切り替えるとか。