[PHP側]
$smarty->assign( 'options', array(1,2,3) );[テンプレート側]
{html_options name=test options=$options}
これで選択肢が「1,2,3」というセレクトボックスを出力できます。
しかし、決まりきった選択肢に対して、いちいちPHP側でコードを書くのは面倒です。
しかもこのhtml_options、id属性を指定できません。
そこで、その辺を改善する関数(zb_html_select_options)を作ってみました。
[テンプレート側]
{zb_html_select_options id=test123 name=test options=1,2,3}
とするだけで、選択肢が「1,2,3」というセレクトボックスを出力できます。
id属性も出力できます。
また年月日など、数値を選択するセレクトボックスで選択肢を範囲指定できるようにしました。
[テンプレート側]
{zb_html_select_options name=date_d id=selD options_from=1 options_to=31}
これで「1〜31」までの日を選択できるリストボックスを生成できます。options_stepを指定すれば増分も指定できます。
更にevalを使って今日を選択できます。
[テンプレート側]
{zb_html_select_options name=date_d id=selD options_from=1 options_to=31 selected=eval:date('j')}
パラメータの値が「eval:」で始まる文字列であった場合、それ以降の文字列をPHPの式としてevalした結果を設定します。
「selected=eval:date('j')」は今日を選択することになります。
「eval:」の記述は、options、options_from、options_to、options_step、selectedパラメータで指定可能です。
■書式
{zb_html_select_options パラメータ=値}
パラメータ 値
----------------------------------------------------------
id selectタグのid属性を指定する。
name selectタグのname属性を指定する。
class selectタグのclass属性を指定する。
style selectタグのstyle属性を指定する。
options OPTIONタグの配列。配列のkeyがvalueに、配列のvalue
が表示名になります。
options_from 数値を選択するセレクトボックスの場合に、下限値を指定する。optionsが指定された場合は無視される。
options_to 数値を選択するセレクトボックスの場合に、上限値を指定する。optionsが指定された場合は無視される。
options_step 数値を選択するセレクトボックスの場合に、選択肢の間隔を指定する。optionsが指定された場合は無視される。
selected 初期状態で選択される値を指定する。
■サンプル
年:現在の年−2〜+2年の範囲 初期状態で現在の年を選択
月:1〜12の範囲 初期状態で現在の月を選択
日:1〜31の範囲 初期状態で現在の日を選択
({zb_html_select_options name=reserve_date_y id=selY options_from=eval:date('Y')-2 options_to=eval:date('Y')+2 selected=eval:date('Y')})年
({zb_html_select_options name=reserve_date_m id=selM options=1,2,3,4,5,6,7,8,9,10,11,12 selected=eval:date('n')})月
({zb_html_select_options name=reserve_date_d id=selD options_from=1 options_to=31 selected=eval:date('j')})日
■ダウンロード
zb_html_select_options.txt
ダウンロード後、Smartyのpluginsフォルダに「function.zb_html_select_options.php」という名前で保存してください。