source: pro-violet-viettel/www/deploy/20150304/application/third_party/Twig/Node/Include.php @ 780

Last change on this file since 780 was 780, checked in by dungnv, 10 years ago
File size: 2.3 KB
Line 
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.potencier@symfony-project.com>
18 */
19class 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, $lineno, $tag = null)
22    {
23        parent::__construct(array('expr' => $expr, 'variables' => $variables), array('only' => (Boolean) $only), $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->getNode('expr') instanceof Twig_Node_Expression_Constant) {
36            $compiler
37                ->write("\$this->env->loadTemplate(")
38                ->subcompile($this->getNode('expr'))
39                ->raw(")->display(")
40            ;
41        } else {
42            $compiler
43                ->write("\$template = ")
44                ->subcompile($this->getNode('expr'))
45                ->raw(";\n")
46                ->write("if (!\$template")
47                ->raw(" instanceof Twig_Template) {\n")
48                ->indent()
49                ->write("\$template = \$this->env->loadTemplate(\$template);\n")
50                ->outdent()
51                ->write("}\n")
52                ->write('$template->display(')
53            ;
54        }
55
56        if (false === $this->getAttribute('only')) {
57            if (null === $this->getNode('variables')) {
58                $compiler->raw('$context');
59            } else {
60                $compiler
61                    ->raw('array_merge($context, ')
62                    ->subcompile($this->getNode('variables'))
63                    ->raw(')')
64                ;
65            }
66        } else {
67            if (null === $this->getNode('variables')) {
68                $compiler->raw('array()');
69            } else {
70                $compiler->subcompile($this->getNode('variables'));
71            }
72        }
73
74        $compiler->raw(");\n");
75    }
76}
Note: See TracBrowser for help on using the repository browser.