Twig-1.3.0/lib/Twig/Node/Include.php
changeset 4 9a001a04b634
equal deleted inserted replaced
3:6d109e3804ac 4:9a001a04b634
       
     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 }