2008-07-18
Smarty html_radios関数でラジオボタンにラベル付け
ラジオボタンには出来るだけラベルを付けたい派です。
Smartyにはラジオボタンの出力を補助する html_radios というカスタム関数があります。これを単純なかたちで使うと、
<?php $smarty->assign('perfume', array( 1 => 'kashiyuka', 2 => 'a-chan', 3 => 'nocchi')); ?>
{html_radios name='perfume' options=$perfume}
↓
<label><input type="radio" name="perfume" value="1" />kashiyuka</label> <label><input type="radio" name="perfume" value="2" />a-chan</label> <label><input type="radio" name="perfume" value="3" />nocchi</label>
こんなhtmlが出力されます。これ、IE7やFirefoxではラベルが効いているんですが、IE6だとダメで、テキストをクリックしてもラジオボタンが選択されません。
for属性なし →
そこで、function.html_radios.phpの中身をのぞいてみました。最初のほうにパラメータに対応する変数の宣言があり、以下のようになっていました。
$labels = true;
$label_ids = false;
コードを追っていくと、パラメータでlabelsがtrueならばlabelタグを、さらにlabel_idsがtrueならばidに紐付いたfor属性を付加して出力、となっているのが分かりました。で、label_idsがデフォルトでfalseであるために、上記のようなhtmlが生成されたというわけです。
IE6でもラベルを効かせるには、テンプレートに以下のようにlabel_idsをtrueにして加えます。
{html_radios name='perfume' options=$perfume label_ids=true}
↓
<label for="perfume_1"><input type="radio" name="perfume" value="1" id="perfume_1" />kashiyuka</label> <label for="perfume_2"><input type="radio" name="perfume" value="2" id="perfume_2" />a-chan</label> <label for="perfume_3"><input type="radio" name="perfume" value="3" id="perfume_3" />nocchi</label>
for属性あり →
ところで、このような仕様になったのは3年ほど前のようですが、なぜかマニュアルに一切載ってないのが不思議です。
あわせて以下ページが参考になると思います。
cl.pocari.org - Smary 2.6.10 以降の html_radios 関数で label タグの for 属性を設定する方法 へっぽこ開発室 - smarty html_radios のlabel_idsパラメータ
関連記事:
トラックバック - http://d.hatena.ne.jp/deeeki/20080718/html_radios
リンク元
- 150 http://www.google.co.jp/search?q=Smarty+ラジオボタン&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a
- 104 http://www.google.co.jp/search?hl=ja&q=smarty+ラジオボタン&lr=
- 96 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4GGIH_jaJP237JP237&q=html_radios+id
- 78 http://www.google.co.jp/search?hl=ja&source=hp&q=smarty+ラジオボタン&lr=&aq=0r&oq=smarty+rajio
- 61 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja:official&hs=KPX&q=smarty+ラジオボタン&btnG=検索&lr=lang_ja
- 45 http://www.google.co.jp/search?q=smarty+radio&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a
- 43 http://www.google.co.jp/url?sa=t&rct=j&q=smarty ラジオボタン&source=web&cd=2&ved=0CCYQFjAB&url=http://d.hatena.ne.jp/deeeki/20080718/html_radios&ei=om-fTrHKHIqtiQfj57zKBg&usg=AFQjCNGtRHCrNVPGC5wjNP2D
- 42 http://www.google.co.jp/search?q=smarty+radio&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a
- 36 http://www.google.co.jp/url?sa=t&rct=j&q=smarty radio&source=web&cd=3&sqi=2&ved=0CC0QFjAC&url=http://d.hatena.ne.jp/deeeki/20080718/html_radios&ei=L-XJTvmEJcyJmQX1m434Dw&usg=AFQjCNGtRHCrNVPGC5wjNP2Dm6BZc5OKlQ
- 34 http://search.yahoo.co.jp/search?p=Smarty+ラジオボタン&search.x=1&fr=top_ga1&tid=top_ga1&ei=UTF-8



