Project

General

Profile

1
<?php
2

    
3
/*
4
 * This file is part of Twig.
5
 *
6
 * (c) 2009 Fabien Potencier
7
 * (c) 2009 Armin Ronacher
8
 *
9
 * For the full copyright and license information, please view the LICENSE
10
 * file that was distributed with this source code.
11
 */
12

    
13
/**
14
 * Represents an include node.
15
 *
16
 * @author Fabien Potencier <fabien@symfony.com>
17
 */
18
class Twig_Node_Include extends Twig_Node implements Twig_NodeOutputInterface
19
{
20
    public function __construct(Twig_Node_Expression $expr, Twig_Node_Expression $variables = null, $only = false, $ignoreMissing = false, $lineno, $tag = null)
21
    {
22
        parent::__construct(array('expr' => $expr, 'variables' => $variables), array('only' => (Boolean) $only, 'ignore_missing' => (Boolean) $ignoreMissing), $lineno, $tag);
23
    }
24

    
25
    /**
26
     * Compiles the node to PHP.
27
     *
28
     * @param Twig_Compiler A Twig_Compiler instance
29
     */
30
    public function compile(Twig_Compiler $compiler)
31
    {
32
        $compiler->addDebugInfo($this);
33

    
34
        if ($this->getAttribute('ignore_missing')) {
35
            $compiler
36
                ->write("try {\n")
37
                ->indent()
38
            ;
39
        }
40

    
41
        $this->addGetTemplate($compiler);
42

    
43
        $compiler->raw('->display(');
44

    
45
        $this->addTemplateArguments($compiler);
46

    
47
        $compiler->raw(");\n");
48

    
49
        if ($this->getAttribute('ignore_missing')) {
50
            $compiler
51
                ->outdent()
52
                ->write("} catch (Twig_Error_Loader \$e) {\n")
53
                ->indent()
54
                ->write("// ignore missing template\n")
55
                ->outdent()
56
                ->write("}\n\n")
57
            ;
58
        }
59
    }
60

    
61
    protected function addGetTemplate(Twig_Compiler $compiler)
62
    {
63
        if ($this->getNode('expr') instanceof Twig_Node_Expression_Constant) {
64
            $compiler
65
                ->write("\$this->env->loadTemplate(")
66
                ->subcompile($this->getNode('expr'))
67
                ->raw(")")
68
            ;
69
        } else {
70
            $compiler
71
                ->write("\$template = \$this->env->resolveTemplate(")
72
                ->subcompile($this->getNode('expr'))
73
                ->raw(");\n")
74
                ->write('$template')
75
            ;
76
        }
77
    }
78

    
79
    protected function addTemplateArguments(Twig_Compiler $compiler)
80
    {
81
        if (false === $this->getAttribute('only')) {
82
            if (null === $this->getNode('variables')) {
83
                $compiler->raw('$context');
84
            } else {
85
                $compiler
86
                    ->raw('array_merge($context, ')
87
                    ->subcompile($this->getNode('variables'))
88
                    ->raw(')')
89
                ;
90
            }
91
        } else {
92
            if (null === $this->getNode('variables')) {
93
                $compiler->raw('array()');
94
            } else {
95
                $compiler->subcompile($this->getNode('variables'));
96
            }
97
        }
98
    }
99
}
(13-13/23)