什么是 Smarty?
为什么要使用它?
用例和工作流程
语法比较
模板继承
最佳实践
速成教程
{html_options} 是一个 自定义函数,它使用指定的数据创建 html <select><option> 组。它还会处理哪些项在默认情况下被选中。
| 属性名称 | 类型 | 是否需要 | 默认 | 描述 |
|---|---|---|---|---|
| values | 数组 | 是,除非使用 options 属性 | n/a | 用于下拉菜单的值数组 |
| output | 数组 | 是,除非使用 options 属性 | n/a | 用于下拉菜单的输出数组 |
| selected | 字符串/数组 | 否 | empty | 选定的选项元素 |
| options | 关联数组 | 是,除非使用 values 和 output | n/a | 值和输出的关联数组 |
| name | 字符串 | 否 | empty | 选择组名称 |
| strict | 布尔值 | 否 | FALSE |
将使“额外”属性 disabled 和 readonly 仅在提供布尔 TRUE 或字符串 “disabled” 和 “readonly” 时才设置 |
必需属性是 values 和 output,除非您使用组合的 options。
如果给定了可选的 name 属性,则创建 <select></select> 标记,否则仅生成 <option> 列表。
如果给定的值是数组,它将将其视为 html <optgroup> 并显示组。<optgroup> 支持递归。
以上列表中不存在的所有参数都将以名称/值对的形式打印在 <select> 标记内。如果未给出可选的 name,则将忽略它们。
所有输出都符合 XHTML 标准。
示例 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>
示例 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);
?>
上述数组将使用以下模板输出(请注意使用 php count() 函数作为修改器设置选择大小)。
<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>
示例 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>
示例 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>
另请参见 {html_checkboxes} 和 {html_radios}