考虑通用Smarty
HTML select
模板
<select id="{$id}" name="{$name}">
{foreach $options as $option}
<option value="{$option->id}">{$description}</option>
{/foreach}
</select>
有时我希望{$description}
为{$option->name}
,有时为{$option->email} ({$option->organisation})
或其他内容,具体取决于select
的用途。有没有办法部分编译模板,设置$description
?
我希望能够做到这样的事情:
$description = '{$option->email} ({$option->organisation})'
$tpl->assign('description', $description);
$tpl->compile(); // This should compile the assigned variables but not complain about variables that have not been assigned
$tpl->assign('id', $id);
$tpl->assign('name', $name);
$tpl->assign('value', $value);
$tpl->assign('options', $options);
$tpl->display();
在$tpl->compile();
之后,模板应为
<select id="{$id}" name="{$name}">
{foreach $options as $option}
<option value="{$option->id}">{$option->email} ({$option->organisation})</option>
{/foreach}
</select>
以便我得到所需的描述。可以这样做吗?
答案 0 :(得分:0)
我能够或多或少地实现我想要使用像这样的模板文件
<select id="{$id}" name="{$name}">
{foreach $options as $option}
<option value="{$option->id}">{eval var=$description}</option>
{/foreach}
</select>
和这样的PHP文件
$description = '{$option->email} ({$option->organisation})'
$tpl->assign('description', $description);
$tpl->assign('id', $id);
$tpl->assign('name', $name);
$tpl->assign('options', $options);
$tpl->display();
要提高效果,可以使用{include file="string:{$description}"}
代替{eval var=$description}
。