新變量的作用域我使用的是塊函數加載數據,不污染當地範圍:開始從智者塊功能
<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));
這真的很醜。你知道我有什麼辦法可以改進嗎?
我發現上面使用的黑客無法正常工作,因爲這將清除模板賦值的變量。相反,我這樣做: '$ replace_stack [] = $ smarty-> tpl_vars' 後來 '$ smarty-> tpl_vars = array_pop($ replace_stack);' 這仍然是非常哈克但目前正常工作。 – sba