部分编译Smarty模板

Partially compile Smarty template

考虑以下 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>

这样我就得到了想要的描述。这能做到吗?

我能够使用这样的模板文件或多或少地实现我想要的东西

<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}