我想你的意思是 smarty_modifier_inter() 返回 smarty 代码,你希望这个 smarty 代码自己解析?Smarty 只会为每个修饰符解析一次您的模板,因此它不会解析返回的 smarty 标签(实际上我假设它会在原始模板正文中运行所有函数,因此它不会解析任何返回的 smarty 标签)。
实现您正在寻找的一种方法是在修饰符内实现递归。例如,假设您的修饰符如下所示:
function smarty_modifier_inter($string)
{
$html = some_function($string); //This may contain a smarty tag, such as {$page->title|inter}
return $html;
}
您可以将其更改为:
function smarty_modifier_inter($string)
{
$html = some_function($string); //This may contain a smarty tag, such as {$page->title|inter}
if (preg_match("/".preg_quote("{$")."/", $html)) { //A very quick and dirty way to see if there are any smarty variables within your template
$html = smarty_modifier_inter($html); //This may contain a smarty tag, such as {$page->title|inter}
}
return $html;
}
这将反复运行 smarty_modifier_inter 到您的字符串,直到它不再包含 smarty 变量。显然,这很容易受到无限循环的影响,因此请谨慎使用!
如果您确定将有单级递归,那么您最多可以简单地在数据上运行您的函数一次