部分编译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}
。
考虑以下 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}
。