使用$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()
调用使用
答案 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