Smarty模板引擎 - 在使用$ smarty-> fetch

时间:2015-08-13 07:23:41

标签: php smarty smarty-plugins

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

$smarty->enableSecurity($instanceOfClass)

调用fetch方法后,disableSecurity方法会重新启用所有plugins/tags/modifiers

不幸的是,当使用enableSecurity并使用禁用函数时会抛出异常

另一种方法是在调用之前使用preg_replace 替换所有要禁用 {literal} {forbiddenTags} {/ literal} 的标记/变量/ ... $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