1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-08-10 18:54:08 +02:00

[feature/twig] Replace phpBB template code with Twig syntax, then parse w/Twig

Fixing begin token/node, adding includejs token/node

PHPBB3-11598
This commit is contained in:
Nathan Guse
2013-06-10 11:17:11 -05:00
parent b775f67128
commit 15114067e6
6 changed files with 146 additions and 67 deletions

View File

@@ -31,40 +31,41 @@ class phpbb_template_twig_node_begin extends Twig_Node
public function compile(Twig_Compiler $compiler)
{
$compiler
->write("if (!isset(\$blocks)) {\n")
->write("if (!isset(\$loops)) {\n")
->indent()
->write("\$blocks = array();")
->write("\$loops = array();")
->write("\$nestingLevel = 0;")
->outdent()
->write("}\n")
->write("\$blocks[\$nestingLevel] = array();\n")
->write("\$loops[\$nestingLevel] = array();\n")
;
if (null !== $this->getNode('else')) {
$compiler->write("\$blocks[\$nestingLevel]['iterated'] = false;\n");
$compiler->write("\$loops[\$nestingLevel]['iterated'] = false;\n");
}
$compiler
->write("foreach (\$context['_phpbb_blocks']['")
->write("if (isset(\$context['loop'])) {")
->write("foreach (\$context['loop']['")
->write($this->getAttribute('beginName'))
->write("'] as \$blocks[\$nestingLevel]['i'] => \$blocks[\$nestingLevel]['values']) {")
->write("'] as \$loops[\$nestingLevel]['i'] => \$loops[\$nestingLevel]['values']) {")
->indent()
;
$compiler->subcompile($this->getNode('body'));
if (null !== $this->getNode('else')) {
$compiler->write("\$blocks[\$nestingLevel]['iterated'] = true;\n");
$compiler->write("\$loops[\$nestingLevel]['iterated'] = true;\n");
}
$compiler
->outdent()
->write("}\n")
->write("}}\n")
;
if (null !== $this->getNode('else')) {
$compiler
->write("if (!\$blocks[\$nestingLevel]['iterated']) {\n")
->write("if (!\$loops[\$nestingLevel]['iterated']) {\n")
->indent()
->subcompile($this->getNode('else'))
->outdent()

View File

@@ -0,0 +1,50 @@
<?php
/*
* This file is part of Twig.
*
* (c) 2009 Fabien Potencier
* (c) 2009 Armin Ronacher
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Represents an include node.
*
* @author Fabien Potencier <fabien@symfony.com>
*/
class phpbb_template_twig_node_includejs extends Twig_Node_Include
{
/**
* Compiles the node to PHP.
*
* @param Twig_Compiler A Twig_Compiler instance
*/
public function compile(Twig_Compiler $compiler)
{
$compiler->addDebugInfo($this);
$compiler
->write("try {\n")
->indent()
;
$this->addGetTemplate($compiler);
$compiler->raw('->display(');
$this->addTemplateArguments($compiler);
$compiler->raw(");\n");
$compiler
->write("} catch (Twig_Error_Loader \$e) {\n")
->indent()
->write("// ignore missing template\n")
->outdent()
->write("}\n\n")
;
}
}