1<?php 2/** 3 * Smarty Internal Plugin Compile Registered Block 4 * Compiles code for the execution of a registered block function 5 * 6 * @package Smarty 7 * @subpackage Compiler 8 * @author Uwe Tews 9 */ 10 11/** 12 * Smarty Internal Plugin Compile Registered Block Class 13 * 14 * @package Smarty 15 * @subpackage Compiler 16 */ 17class Smarty_Internal_Compile_Private_Registered_Block extends Smarty_Internal_Compile_Private_Block_Plugin 18{ 19 /** 20 * Setup callback, parameter array and nocache mode 21 * 22 * @param \Smarty_Internal_TemplateCompilerBase $compiler 23 * @param array $_attr attributes 24 * @param string $tag 25 * @param null $function 26 * 27 * @return array 28 */ 29 public function setup(Smarty_Internal_TemplateCompilerBase $compiler, $_attr, $tag, $function) 30 { 31 if (isset($compiler->smarty->registered_plugins[ Smarty::PLUGIN_BLOCK ][ $tag ])) { 32 $tag_info = $compiler->smarty->registered_plugins[ Smarty::PLUGIN_BLOCK ][ $tag ]; 33 $callback = $tag_info[ 0 ]; 34 if (is_array($callback)) { 35 if (is_object($callback[ 0 ])) { 36 $callable = "array(\$_block_plugin{$this->nesting}, '{$callback[1]}')"; 37 $callback = 38 array("\$_smarty_tpl->smarty->registered_plugins['block']['{$tag}'][0][0]", "->{$callback[1]}"); 39 } else { 40 $callable = "array(\$_block_plugin{$this->nesting}, '{$callback[1]}')"; 41 $callback = 42 array("\$_smarty_tpl->smarty->registered_plugins['block']['{$tag}'][0][0]", "::{$callback[1]}"); 43 } 44 } else { 45 $callable = "\$_block_plugin{$this->nesting}"; 46 $callback = array("\$_smarty_tpl->smarty->registered_plugins['block']['{$tag}'][0]", ''); 47 } 48 } else { 49 $tag_info = $compiler->default_handler_plugins[ Smarty::PLUGIN_BLOCK ][ $tag ]; 50 $callback = $tag_info[ 0 ]; 51 if (is_array($callback)) { 52 $callable = "array('{$callback[0]}', '{$callback[1]}')"; 53 $callback = "{$callback[1]}::{$callback[1]}"; 54 } else { 55 $callable = null; 56 } 57 } 58 $compiler->tag_nocache = !$tag_info[ 1 ] | $compiler->tag_nocache; 59 $_paramsArray = array(); 60 foreach ($_attr as $_key => $_value) { 61 if (is_int($_key)) { 62 $_paramsArray[] = "$_key=>$_value"; 63 } elseif ($compiler->template->caching && in_array($_key, $tag_info[ 2 ])) { 64 $_value = str_replace('\'', "^#^", $_value); 65 $_paramsArray[] = "'$_key'=>^#^.var_export($_value,true).^#^"; 66 } else { 67 $_paramsArray[] = "'$_key'=>$_value"; 68 } 69 } 70 return array($callback, $_paramsArray, $callable); 71 } 72} 73