diff options
Diffstat (limited to 'include/smarty/libs/sysplugins/smarty_internal_compile_private_object_function.php')
-rw-r--r-- | include/smarty/libs/sysplugins/smarty_internal_compile_private_object_function.php | 61 |
1 files changed, 33 insertions, 28 deletions
diff --git a/include/smarty/libs/sysplugins/smarty_internal_compile_private_object_function.php b/include/smarty/libs/sysplugins/smarty_internal_compile_private_object_function.php index f649084c3..e306e0f6d 100644 --- a/include/smarty/libs/sysplugins/smarty_internal_compile_private_object_function.php +++ b/include/smarty/libs/sysplugins/smarty_internal_compile_private_object_function.php @@ -1,22 +1,21 @@ <?php /** - * Smarty Internal Plugin Compile Object Funtion - * + * Smarty Internal Plugin Compile Object Function * Compiles code for registered objects as function * - * @package Smarty + * @package Smarty * @subpackage Compiler - * @author Uwe Tews + * @author Uwe Tews */ /** * Smarty Internal Plugin Compile Object Function Class * - * @package Smarty + * @package Smarty * @subpackage Compiler */ -class Smarty_Internal_Compile_Private_Object_Function extends Smarty_Internal_CompileBase { - +class Smarty_Internal_Compile_Private_Object_Function extends Smarty_Internal_CompileBase +{ /** * Attribute definition: Overwrites base class. * @@ -28,14 +27,15 @@ class Smarty_Internal_Compile_Private_Object_Function extends Smarty_Internal_Co /** * Compiles code for the execution of function plugin * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * @param array $parameter array with compilation parameter - * @param string $tag name of function - * @param string $method name of method to call + * @param array $args array with attributes from parser + * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object + * @param array $parameter array with compilation parameter + * @param string $tag name of function + * @param string $method name of method to call + * * @return string compiled code */ - public function compile($args, $compiler, $parameter, $tag, $method) + public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter, $tag, $method) { // check and get attributes $_attr = $this->getAttributes($compiler, $args); @@ -48,22 +48,29 @@ class Smarty_Internal_Compile_Private_Object_Function extends Smarty_Internal_Co $_assign = $_attr['assign']; unset($_attr['assign']); } - // convert attributes into parameter array string - if ($compiler->smarty->registered_objects[$tag][2]) { - $_paramsArray = array(); - foreach ($_attr as $_key => $_value) { - if (is_int($_key)) { - $_paramsArray[] = "$_key=>$_value"; - } else { - $_paramsArray[] = "'$_key'=>$_value"; + // method or property ? + if (method_exists($compiler->smarty->registered_objects[$tag][0], $method)) { + // convert attributes into parameter array string + if ($compiler->smarty->registered_objects[$tag][2]) { + $_paramsArray = array(); + foreach ($_attr as $_key => $_value) { + if (is_int($_key)) { + $_paramsArray[] = "$_key=>$_value"; + } else { + $_paramsArray[] = "'$_key'=>$_value"; + } } + $_params = 'array(' . implode(",", $_paramsArray) . ')'; + $return = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params},\$_smarty_tpl)"; + } else { + $_params = implode(",", $_attr); + $return = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params})"; } - $_params = 'array(' . implode(",", $_paramsArray) . ')'; - $return = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params},\$_smarty_tpl)"; } else { - $_params = implode(",", $_attr); - $return = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params})"; + // object property + $return = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}"; } + if (empty($_assign)) { // This tag does create output $compiler->has_output = true; @@ -71,9 +78,7 @@ class Smarty_Internal_Compile_Private_Object_Function extends Smarty_Internal_Co } else { $output = "<?php \$_smarty_tpl->assign({$_assign},{$return});?>\n"; } + return $output; } - } - -?>
\ No newline at end of file |