1

How can I unload or disallow smarty core plugins from a template when using $smarty->fetch('mytemplate.tpl') method

For example the template mytemplate.tpl contains {html_options} and {html_table}

When using $smarty->fetch('mytemplate.tpl') only the {html_options} should be parsed by smarty, but {html_table} not

removing the function.html_table.php from plugin folder is not an option as it is still in use by another $smarty->fetch() call

Ole K
  • 754
  • 1
  • 9
  • 32

1 Answers1

0

A possible solutions is to extend from the Smarty_Security class and enable securty by using the method

$smarty->enableSecurity($instanceOfClass)

Once the fetch method has been called , disableSecurity method do the trick to reenable all plugins/tags/modifiers again.

Unfortunately when enableSecurity is used and forbidden functions are used an Exception is thrown

An alternative is to replace all tags/variables/... you want to disallow with {literal}{forbiddenTags}{/literal} by using preg_replace before calling $smarty->fetch([...])

Example

# 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);

More details about the Security class here: http://www.smarty.net/docs/en/advanced.features.tpl

GAMITG
  • 3,810
  • 7
  • 32
  • 51
Ole K
  • 754
  • 1
  • 9
  • 32