|
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 * @package twig |
|
17 * @author Fabien Potencier <fabien@symfony.com> |
|
18 */ |
|
19 class Twig_Node_Include extends Twig_Node implements Twig_NodeOutputInterface |
|
20 { |
|
21 public function __construct(Twig_Node_Expression $expr, Twig_Node_Expression $variables = null, $only = false, $ignoreMissing = false, $lineno, $tag = null) |
|
22 { |
|
23 parent::__construct(array('expr' => $expr, 'variables' => $variables), array('only' => (Boolean) $only, 'ignore_missing' => (Boolean) $ignoreMissing), $lineno, $tag); |
|
24 } |
|
25 |
|
26 /** |
|
27 * Compiles the node to PHP. |
|
28 * |
|
29 * @param Twig_Compiler A Twig_Compiler instance |
|
30 */ |
|
31 public function compile(Twig_Compiler $compiler) |
|
32 { |
|
33 $compiler->addDebugInfo($this); |
|
34 |
|
35 if ($this->getAttribute('ignore_missing')) { |
|
36 $compiler |
|
37 ->write("try {\n") |
|
38 ->indent() |
|
39 ; |
|
40 } |
|
41 |
|
42 if ($this->getNode('expr') instanceof Twig_Node_Expression_Constant) { |
|
43 $compiler |
|
44 ->write("\$this->env->loadTemplate(") |
|
45 ->subcompile($this->getNode('expr')) |
|
46 ->raw(")->display(") |
|
47 ; |
|
48 } else { |
|
49 $compiler |
|
50 ->write("\$template = \$this->env->resolveTemplate(") |
|
51 ->subcompile($this->getNode('expr')) |
|
52 ->raw(");\n") |
|
53 ->write('$template->display(') |
|
54 ; |
|
55 } |
|
56 |
|
57 if (false === $this->getAttribute('only')) { |
|
58 if (null === $this->getNode('variables')) { |
|
59 $compiler->raw('$context'); |
|
60 } else { |
|
61 $compiler |
|
62 ->raw('array_merge($context, ') |
|
63 ->subcompile($this->getNode('variables')) |
|
64 ->raw(')') |
|
65 ; |
|
66 } |
|
67 } else { |
|
68 if (null === $this->getNode('variables')) { |
|
69 $compiler->raw('array()'); |
|
70 } else { |
|
71 $compiler->subcompile($this->getNode('variables')); |
|
72 } |
|
73 } |
|
74 |
|
75 $compiler->raw(");\n"); |
|
76 |
|
77 if ($this->getAttribute('ignore_missing')) { |
|
78 $compiler |
|
79 ->outdent() |
|
80 ->write("} catch (Twig_Error_Loader \$e) {\n") |
|
81 ->indent() |
|
82 ->write("// ignore missing template\n") |
|
83 ->outdent() |
|
84 ->write("}\n\n") |
|
85 ; |
|
86 } |
|
87 } |
|
88 } |