1 | <?php |
---|
2 | /** |
---|
3 | * Smarty Internal Plugin Function Call Handler |
---|
4 | * |
---|
5 | * @package Smarty |
---|
6 | * @subpackage PluginsInternal |
---|
7 | * @author Uwe Tews |
---|
8 | */ |
---|
9 | |
---|
10 | /** |
---|
11 | * This class does call function defined with the {function} tag |
---|
12 | * |
---|
13 | * @package Smarty |
---|
14 | * @subpackage PluginsInternal |
---|
15 | */ |
---|
16 | class Smarty_Internal_Function_Call_Handler { |
---|
17 | |
---|
18 | /** |
---|
19 | * This function handles calls to template functions defined by {function} |
---|
20 | * It does create a PHP function at the first call |
---|
21 | * |
---|
22 | * @param string $_name template function name |
---|
23 | * @param Smarty_Internal_Template $_template template object |
---|
24 | * @param array $_params Smarty variables passed as call parameter |
---|
25 | * @param string $_hash nocache hash value |
---|
26 | * @param bool $_nocache nocache flag |
---|
27 | */ |
---|
28 | public static function call($_name, Smarty_Internal_Template $_template, $_params, $_hash, $_nocache) |
---|
29 | { |
---|
30 | if ($_nocache) { |
---|
31 | $_function = "smarty_template_function_{$_name}_nocache"; |
---|
32 | } else { |
---|
33 | $_function = "smarty_template_function_{$_hash}_{$_name}"; |
---|
34 | } |
---|
35 | if (!is_callable($_function)) { |
---|
36 | $_code = "function {$_function}(\$_smarty_tpl,\$params) { |
---|
37 | \$saved_tpl_vars = \$_smarty_tpl->tpl_vars; |
---|
38 | foreach (\$_smarty_tpl->smarty->template_functions['{$_name}']['parameter'] as \$key => \$value) {\$_smarty_tpl->tpl_vars[\$key] = new Smarty_variable(\$value);}; |
---|
39 | foreach (\$params as \$key => \$value) {\$_smarty_tpl->tpl_vars[\$key] = new Smarty_variable(\$value);}?>"; |
---|
40 | if ($_nocache) { |
---|
41 | $_code .= preg_replace(array("!<\?php echo \\'/\*%%SmartyNocache:{$_template->smarty->template_functions[$_name]['nocache_hash']}%%\*/|/\*/%%SmartyNocache:{$_template->smarty->template_functions[$_name]['nocache_hash']}%%\*/\\';\?>!", |
---|
42 | "!\\\'!"), array('', "'"), $_template->smarty->template_functions[$_name]['compiled']); |
---|
43 | $_template->smarty->template_functions[$_name]['called_nocache'] = true; |
---|
44 | } else { |
---|
45 | $_code .= preg_replace("/{$_template->smarty->template_functions[$_name]['nocache_hash']}/", $_template->properties['nocache_hash'], $_template->smarty->template_functions[$_name]['compiled']); |
---|
46 | } |
---|
47 | $_code .= "<?php \$_smarty_tpl->tpl_vars = \$saved_tpl_vars;}"; |
---|
48 | eval($_code); |
---|
49 | } |
---|
50 | $_function($_template, $_params); |
---|
51 | } |
---|
52 | |
---|
53 | } |
---|
54 | |
---|
55 | ?> |
---|