我正在使用块函数来加载数据而不会污染本地范围:
<h1>{$title}</h1>
{loadstuff}
<h2>{$title}</h2>
<p>{$text}</p>
{/loadstuff}
<p>{$text}</p>
是否有一种在块函数中启动新变量范围的好方法?在Smarty2中,我使用了这个黑客:
function smarty_block_loadstuff($params, $content, $smarty, &$repeat) {
static $replace_stack = array();
if ($repeat) {
$replace_stack []= $smarty->get_template_vars();
$smarty->assign(loadstuff());
} else {
// Reload the original vars
$template_vars = &$smarty->get_template_vars();
$template_vars = array_pop($replace_stack);
}
return $content;
}
$ template_vars上的参考替换不适用于Smarty3。 Smarty3在范围界定方面做了很多改变,我希望可能只是启动一个嵌套范围。不幸的是,我发现无法在API中添加范围。现在我正在做这个黑客:
$smarty->clearAllAssign();
$smarty->assign('smarty', $smarty); // It seems to be necessary
$smarty->assign(array_pop($replace_stack));
哪个真的很难看。你知道我可以改进的方法吗?
答案 0 :(得分:0)
我们可以做些什么来让getTemplateVars()像samrty2一样工作,
&#34; file:smarty_internal_templatebase.php&#34; , 部分&#34;
if ($merge_tpl_vars){} ,
这里我们可以合并解析模板时分配的变量
$_template->tpl_vars = $save_tpl_vars
可以更改为:
$this->tpl_vars = array_merge($this->tpl_vars, $save_tpl_vars, $_template->tpl_vars);
现在smarty3 getTemplateVars()返回模板中分配的变量,如smarty2