分かりにくいエラー

今日は分かりづらい二つのエラーに悩まされてあまり進みませんでした(^ ^;)

その一

smarty で,{elseif} が閉じられていない,unclosed tag だと怒られる。でも,どう見ても閉じられている。

仕方がないので,{elseif} を削ったところ,その下の {else} が閉じられていないとまた怒られる。仕方ないのでこれも削ると通った。

しばらくコードを見て悩んだのですが,テンプレートファイルの文字コードが shift-jis で保存されているのが原因でした。これではいくらコードを見ていても分かりません。

"smarty unclosed tag" で検索すると少数ひっかかるので,たまに同じ事をやってしまう人がいるのでしょう。

その二

やはり smarty がらみ。これが曲者で,PHPデバグモードでは正常に処理される。デバグモードをオフにすると,発現する。PHPデバグモードで確認して,「ああ,表示されるね。よしよし」と思ってオフにするとアウトなのです。

なんでこんな挙動になるのかはよく分かりませんが,

<{assign var=a value=`$obj->getShow('id')`}>

と,間違えてバッククオート(`)を付けていたのが原因のようです。