mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-28 06:08:52 +00:00
[feature/twig] Event template tag
PHPBB3-11598
This commit is contained in:
parent
62fda07dd4
commit
3bd281fa27
4 changed files with 97 additions and 40 deletions
|
@ -17,6 +17,35 @@ if (!defined('IN_PHPBB'))
|
||||||
|
|
||||||
class phpbb_template_twig_environment extends Twig_Environment
|
class phpbb_template_twig_environment extends Twig_Environment
|
||||||
{
|
{
|
||||||
|
/** @var array */
|
||||||
|
protected $phpbbExtensions;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the cache filename for a given template.
|
||||||
|
*
|
||||||
|
* @param string $name The template name
|
||||||
|
*
|
||||||
|
* @return string The cache file name
|
||||||
|
*/
|
||||||
|
public function getCacheFilename($name)
|
||||||
|
{
|
||||||
|
if (false === $this->cache) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->getCache() . '/' . preg_replace('#[^a-zA-Z0-9_/]#', '_', $name) . '.php';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function set_phpbb_extensions($extensions)
|
||||||
|
{
|
||||||
|
$this->phpbbExtensions = $extensions;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function get_phpbb_extensions()
|
||||||
|
{
|
||||||
|
return $this->phpbbExtensions;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* recursive helper to set variables into $context so that Twig can properly fetch them for display
|
* recursive helper to set variables into $context so that Twig can properly fetch them for display
|
||||||
*
|
*
|
||||||
|
|
44
phpBB/includes/template/twig/node/event.php
Normal file
44
phpBB/includes/template/twig/node/event.php
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @package phpBB3
|
||||||
|
* @copyright (c) 2013 phpBB Group
|
||||||
|
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class phpbb_template_twig_node_event extends Twig_Node
|
||||||
|
{
|
||||||
|
protected $environment;
|
||||||
|
|
||||||
|
public function __construct(Twig_Node_Expression $expr, phpbb_template_twig_environment $environment, $lineno, $tag = null)
|
||||||
|
{
|
||||||
|
$this->environment = $environment;
|
||||||
|
|
||||||
|
parent::__construct(array('expr' => $expr), array(), $lineno, $tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Compiles the node to PHP.
|
||||||
|
*
|
||||||
|
* @param Twig_Compiler A Twig_Compiler instance
|
||||||
|
*/
|
||||||
|
public function compile(Twig_Compiler $compiler)
|
||||||
|
{
|
||||||
|
$compiler->addDebugInfo($this);
|
||||||
|
|
||||||
|
$compiler->indent();
|
||||||
|
|
||||||
|
$location = $this->getNode('expr')->getAttribute('name');
|
||||||
|
|
||||||
|
foreach ($this->environment->get_phpbb_extensions() as $ext_namespace => $ext_path)
|
||||||
|
{
|
||||||
|
$ext_namespace = str_replace('/', '_', $ext_namespace);
|
||||||
|
|
||||||
|
if ($this->environment->getLoader()->exists('@' . $ext_namespace . '/' . $location . '.html'))
|
||||||
|
{
|
||||||
|
$compiler->write("\$this->env->loadTemplate('@" . $ext_namespace . "/" . $location . ".html')->display(\$context);\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,49 +1,29 @@
|
||||||
<?php
|
<?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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Includes a template.
|
|
||||||
*
|
*
|
||||||
* <pre>
|
* @package phpBB3
|
||||||
* {% include 'header.html' %}
|
* @copyright (c) 2013 phpBB Group
|
||||||
* Body
|
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||||
* {% include 'footer.html' %}
|
*
|
||||||
* </pre>
|
|
||||||
*/
|
*/
|
||||||
class phpbb_template_twig_tokenparser_event extends Twig_TokenParser_Include
|
|
||||||
|
class phpbb_template_twig_tokenparser_event extends Twig_TokenParser
|
||||||
{
|
{
|
||||||
protected function parseArguments()
|
/**
|
||||||
|
* Parses a token and returns a node.
|
||||||
|
*
|
||||||
|
* @param Twig_Token $token A Twig_Token instance
|
||||||
|
*
|
||||||
|
* @return Twig_NodeInterface A Twig_NodeInterface instance
|
||||||
|
*/
|
||||||
|
public function parse(Twig_Token $token)
|
||||||
{
|
{
|
||||||
|
$expr = $this->parser->getExpressionParser()->parseExpression();
|
||||||
|
|
||||||
$stream = $this->parser->getStream();
|
$stream = $this->parser->getStream();
|
||||||
|
|
||||||
$ignoreMissing = true;
|
|
||||||
|
|
||||||
$variables = null;
|
|
||||||
if ($stream->test(Twig_Token::NAME_TYPE, 'with')) {
|
|
||||||
$stream->next();
|
|
||||||
|
|
||||||
$variables = $this->parser->getExpressionParser()->parseExpression();
|
|
||||||
}
|
|
||||||
|
|
||||||
$only = false;
|
|
||||||
if ($stream->test(Twig_Token::NAME_TYPE, 'only')) {
|
|
||||||
$stream->next();
|
|
||||||
|
|
||||||
$only = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
$stream->expect(Twig_Token::BLOCK_END_TYPE);
|
$stream->expect(Twig_Token::BLOCK_END_TYPE);
|
||||||
|
|
||||||
return array($variables, $only, $ignoreMissing);
|
return new phpbb_template_twig_node_event($expr, $this->parser->getEnvironment(), $token->getLine(), $this->getTag());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -125,6 +125,9 @@ class phpbb_template_twig implements phpbb_template
|
||||||
'autoescape' => false,
|
'autoescape' => false,
|
||||||
));
|
));
|
||||||
|
|
||||||
|
// Set enabled phpbb extensions
|
||||||
|
$this->twig->set_phpbb_extensions($this->extension_manager->all_enabled());
|
||||||
|
|
||||||
// Clear previous cache files (while WIP)
|
// Clear previous cache files (while WIP)
|
||||||
// @todo remove
|
// @todo remove
|
||||||
if (is_dir($this->cachepath))
|
if (is_dir($this->cachepath))
|
||||||
|
@ -182,7 +185,8 @@ class phpbb_template_twig implements phpbb_template
|
||||||
{
|
{
|
||||||
if (is_dir($ext_path . 'styles/' . $style_name))
|
if (is_dir($ext_path . 'styles/' . $style_name))
|
||||||
{
|
{
|
||||||
$this->twig->getLoader()->addPath($ext_path . 'styles/' . $style_name, $ext_namespace);
|
// namespaces cannot contain /
|
||||||
|
$this->twig->getLoader()->addPath($ext_path . 'styles/' . $style_name . '/template', str_replace('/', '_', $ext_namespace));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue