1

$smarty->fetch('mytemplate.tpl')使用方法时如何从模板中卸载或禁止 smarty 核心插件

例如模板mytemplate.tpl包含{html_options}{html_table}

$smarty->fetch('mytemplate.tpl')只使用{html_options}时应该由 smarty 解析,但{html_table}不是

从插件文件夹中删除function.html_table.php不是一个选项,因为它仍在被另一个$smarty->fetch()调用使用

4

1 回答 1

0

一种可能的解决方案是从Smarty_Security类扩展并使用该方法启用安全性

$smarty->enableSecurity($instanceOfClass)

一旦调用了 fetch 方法,disableSecurity方法就会再次重新启用所有方法plugins/tags/modifiers

不幸的是,当使用 enableSecurity 并使用禁止的功能时,会抛出异常

另一种方法是在调用之前使用{literal}{forbiddenTags}{/literal}替换您想要禁止的所有标签/变量/...preg_replace $smarty->fetch([...])

例子

# negate regular expression pattern to allow only the below tags
$pattern = "/\{(?!allowedTag1|allowedTag2).*?\}/";
$replacement = '{literal}$0{/literal}';

$content = preg_replace($pattern, $replacement, $content);
$smarty->fetch("string:" . $content);

有关此处安全类的更多详细信息:http ://www.smarty.net/docs/en/advanced.features.tpl

于 2015-08-17T16:18:40.147 回答