如何在Smarty中使用html_options时添加更多属性

时间:2013-09-30 00:13:29

标签: smarty3

PHP部分

$ids = array(1, 2, 3);
$texts = array('a', 'b', 'c');
$attributes = array('a1', 'b1', 'c1');
$smarty->assign('ids', $ids);
$smarty->assign('texts', $texts);
$smarty->assign('attributes', $attributes);

Tpl Part

<select name="test">
{html_options values=$ids output=$texts attribute=$attributes}
</select>

结果

<select name="test">
<option value="1">a</option>
<option value="2">b</option>
<option value="3">c</option>
</select>

我可以添加更多已定义的属性吗?

1 个答案:

答案 0 :(得分:2)

可悲的是,没有这样的功能可用。您可以使用以下代码直接生成选项:

<select name="test">
  {foreach $ids as $id}
    <option value="{$id}" attribute="{$attributes[$id@index]}">{$texts[$id@index]}</option>
  {/foreach}
</select>

或者,我建议制作一些更灵活的数据结构,例如:

$data = array( 1 => array('attr' => 'a1', 'text' => 'a'),
               2 => array('attr' => 'a2', 'text' => 'b'),
               3 => array('attr' => 'a3', 'text' => 'c') );

$smarty->assign('data', $data);

然后使用这样的代码

<select name="test">
  {foreach $data as $item}
    <option value="{$item@key}" attribute="{$item.attr}">{$item.text}</option>
  {/foreach}
</select>

你应该添加一些转义到值或使用auto_escape到值,这只是一个基本的想法。