什么是 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}