Smary 2.6.10 以降の html_radios 関数で label タグの for 属性を設定する方法
例えば,以下のようなコードがあったとして
<?php
$smarty->assign('cust_radios', array(
1000 => 'Johnson',
1001 => 'Smith'
);
$smarty->assign('customer_id', 1001);
?>
テンプレートを以下のように記述する.
{html_radios name="id" options=$cust_radios selected=$customer_id}
出力はこうなるはずだった.
<label for="id_1001"><input type="radio" name="id" value="1001" id="id_1001" checked="checked" />Johnson</label>
<label for="id_1002"><input type="radio" name="id" value="1002" id="id_1002" />Smith</label>
ところが Smarty 2.6.10 以降,出力は以下のようになる.
<label><input type="radio" name="id" value="1001" checked="checked" />Johnson</label>
<label><input type="radio" name="id" value="1002" />Smith</label>
これで,何が問題かというと,IE では Johnson や Smith をクリックしても,ラジオボタンは選択されない.
Firefox や Opera などでは OK なのに.
そこで Smarty 2.6.10 辺りから追加された label_ids オプションを使うと
{html_radios name="id" options=$cust_radios selected=$customer_id label_ids=true}
ちゃんと,label タグに for 属性が付いて,IE でも選択できるようになった.
<label for="id_1001"><input type="radio" name="id" value="1001" id="id_1001" checked="checked" />Johnson</label>
<label for="id_1002"><input type="radio" name="id" value="1002" id="id_1002" />Smith</label>
http://viewcvs.php.net/viewcvs.cgi/smarty/libs/plugins/function.html_radio ...