部分编译Smarty模板

时间:2015-01-16 12:59:01

标签: smarty

考虑通用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>

以便我得到所需的描述。可以这样做吗?

1 个答案:

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