What is Smarty?
Why use it?
Use Cases and Work Flow
Syntax Comparison
Template Inheritance
Best Practices
Crash Course
You may use the Smarty logo according to the trademark notice.
For sponsorship, advertising, news or other inquiries, contact us at:
{html_options}
是一个自定义函数,
可以使用提供的数据,生成HTML的<select><option>
标签,还可以设置选中项等属性。
参数名称 | 类型 | 必选参数 | 默认值 | 说明 |
---|---|---|---|---|
values | array | Yes, 除非使用 options 属性 | n/a | 下拉框值的数组 |
output | array | Yes, 除非使用 options 属性 | n/a | 下拉框显示的数组 |
selected | string/array | No | empty | 选中的项 |
options | 数组 | Yes, 除非使用 values 和 output | n/a | 键值对的数组,用于下拉框 |
name | string | No | empty | select组的名称 |
必要的属性是values
和 output
,
除非你使用组合的options
来代替。
除非提供了可选属性name
, 才会创建
<select></select>
标签,
不然,只会生成<option>
列表。
如果设置的值是数组,会当作HTML的<optgroup>
,并且显示该下拉组。
<optgroup>
是支持递归的。
其他不在上面列表中的键值对参数,会直接在输出的 <select>
标签中显示成 名称=值 的属性。
如果可选参数name
没有设置,那么它们将被忽略。
全部的输出都符合XHTML的。
Example 8.9. 使用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 value="1800">Joe Schmoe</option> <option value="9904" selected="selected">Jack Smith</option> <option value="2003">Charlie Brown</option> </select>
Example 8.10. 分开赋值values
和 ouptut
<?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); ?>
上面的两个数组,将会如下输出HTML
(注意这里有使用了PHP的
count()
函数作为修饰器来计算size值).
<select name="customer_id" size="{$cust_names|@count}"> {html_options values=$cust_ids output=$cust_names selected=$customer_id} </select>
输出:
<select name="customer_id" size="3"> <option value="56">Joe Schmoe</option> <option value="92" selected="selected">Jane Johnson</option> <option value="13">Charlie Brown</option> </select>
Example 8.11. 数据库例子(如 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>
Example 8.12. <optgroup> 下拉组
<?php $arr['Sport'] = array(6 => 'Golf', 9 => 'Cricket',7 => 'Swim'); $arr['Rest'] = array(3 => 'Sauna',1 => 'Massage'); $smarty->assign('lookups', $arr); $smarty->assign('fav', 7); ?>
而模板里:
{html_options name=foo options=$lookups selected=$fav}
输出:
<select name="foo"> <optgroup label="Sport"> <option value="6">Golf</option> <option value="9">Cricket</option> <option value="7" selected="selected">Swim</option> </optgroup> <optgroup label="Rest"> <option value="3">Sauna</option> <option value="1">Massage</option> </optgroup> </select>