takLog

備忘録とか、その他

Smartyで引っかかったところのメモ

Smartyっていうテンプレートエンジンを使っていて引っかかったところのメモ。

Smartyのカスタム関数{html_radios}を任意の要素で囲いたい場合

配列から簡単にラジオボタンを作ってくれるこの関数、何も設定しないと横にだら~っと並ぶようになっています。separator属性を使用しBR要素を入れれば縦にラジオボタンが並んでくれるけど、BR要素でリストっぽく見せるのはどうも好かない。というかおかしい。

やっぱりリストといったらUL+LIでしょ!
っていうことで、ググって参考にしたサイトが以下
www.edgebook.net
{html_radios}関数のassign属性+{section}関数を使えばいいのですな~ふむふ。と、まるっとコピーしてテストしたところ、何故かHTMLの<>がエスケープされてしまった。

なぜ?

どうやらセキュリティ上?データを出力する際に自動的にエスケープするという設定になっているぽい。
それを回避するために出力する部分に{$val|smarty:nodefaults}を設定する。と、予想通りの出力結果になる。

つまりこう書けばおk

$array_val = array(
  "1" => "1st",
  "2" => "2nd",
  "3" => "3rd"
);

{html_radios name=list_name options=$array_val assign=radioList}
<ul>
{section name=sectionName loop=$radioList}
 <li>
  {$radioList[sectionName]|smarty:nodefaults}
 </li>
{/section}
</ul>

上記のサイトとは念のため変数名とか変えたよ。なんとなく。
とにもかくにもこれで任意の要素で囲めます。やったね。
正しいマークアップを心掛けよう。