Subversion Repositories ALCASAR

Rev

Details | Last modification | View Log

Rev Author Line No. Line
2809 rexy 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
 */
17
class 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
}