{html_options}

    {html_options}是一个定制函数用来根据给定的值创建HTML的<select><option>组。它也处理哪些项目缺省为选中状态。

属性名 类型 必需? 缺省 描述
valuesarray 是,除非指定了options属性 n/a 下拉框值的数组
outputarray 是,除非指定了options n/a 下拉框显示的数组
selectedstring/arrayNoempty 选中的选项
optionsassociative array 是,除非使用values和output n/a 值和输出的一个关联数组
namestringNoempty 该选择下拉框组的名称

例子8-12. 使用于options属性中的关联数组

<?php
$smarty
->assign('myOptions', array(
                                
1800 => 'Joe Schmoe',
                                
9904 => 'Jack Smith',
                                
2003 => 'Charlie Brown')
                                );
$smarty->assign('mySelect'9904);
?>

    下面的模板将创建一个下拉列表框。注意,由于指定了name属性,也同时创建了<select>标记。

{html_options name=foo options=$myOptions selected=$mySelect}

    上例的输出为:

<select name="foo">
<option label="Joe Schmoe" value="1800">Joe Schmoe</option>
<option label="Jack Smith" value="9904" selected="selected">Jack Smith</option>
<option label="Charlie Brown" value="2003">Charlie Brown</option>
</select>

例子8-13. 使用独立的值和输出数组的下拉框

<?php
$smarty
->assign('cust_ids', array(56,92,13));
$smarty->assign('cust_names', array(
                              
'Joe Schmoe',
                              
'Jane Johnson',
                              
'Charlie Brown'));
$smarty->assign('customer_id'92);
?>

    上面的数组将可以由如下的模板输出(注意我们使用了PHP的count()函数来调整SELECT的尺寸):

<select name="customer_id" size="{$cust_names|@count}">
   {html_options values=$cust_ids output=$cust_names selected=$customer_id}
</select>

    上例将输出:

<select name="customer_id">
    <option label="Joe Schmoe" value="56">Joe Schmoe</option>
    <option label="Jack Smith" value="92" selected="selected">Jane Johnson</option>
    <option label="Charlie Brown" value="13">Charlie Brown</option>
</select>

例子8-14. 数据库例子(如ADODB或PEAR)

<?php

$sql 
'select type_id, types from contact_types order by type';
$smarty->assign('contact_types',$db->getAssoc($sql));

$sql 'select contact_id, name, email, contact_type_id
        from contacts where contact_id='
.$contact_id;
$smarty->assign('contact',$db->getRow($sql));

?>

    模板如下,注意truncate修饰符的用法。

<select name="type_id">
    <option value='null'>-- none --</option>
    {html_options options=$contact_types|truncate:20 selected=$contact.type_id}
</select>

例子8-15. 带有<optgroup>的下拉框

<?php
$arr
['Sport'] = array(=> 'Golf'=> 'Cricket',=> 'Swim');
$arr['Rest']  = array(=> 'Sauna',=> 'Massage');
$smarty->assign('lookups'$arr);
$smarty->assign('fav'7);
?>

    上面的脚本和下面的模板

{html_options name=foo options=$myOptions selected=$mySelect}

    将输出

<select name="breakTime">
<optgroup label="Sport">
<option label="Golf" value="6">Golf</option>
<option label="Cricket" value="9">Cricket</option>
<option label="Swim" value="7" selected="selected">Swim</option>
</optgroup>
<optgroup label="Rest">
<option label="Sauna" value="3">Sauna</option>
<option label="Massage" value="1">Massage</option>
</optgroup>
</select>

    参见{html_checkboxes}{html_radios}