]>
Commit | Line | Data |
---|---|---|
a4565e88 NL |
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 | } |