mirror of
https://github.com/phpbb/phpbb.git
synced 2025-05-26 01:04:10 +02:00
[feature/twig] Event template tag
PHPBB3-11598
This commit is contained in:
parent
62fda07dd4
commit
3bd281fa27
@ -17,6 +17,35 @@ if (!defined('IN_PHPBB'))
|
||||
|
||||
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
|
||||
*
|
||||
|
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
|
||||
|
||||
/*
|
||||
* 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>
|
||||
* {% include 'header.html' %}
|
||||
* Body
|
||||
* {% include 'footer.html' %}
|
||||
* </pre>
|
||||
*/
|
||||
class phpbb_template_twig_tokenparser_event extends Twig_TokenParser_Include
|
||||
*
|
||||
* @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_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();
|
||||
|
||||
$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);
|
||||
|
||||
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,
|
||||
));
|
||||
|
||||
// Set enabled phpbb extensions
|
||||
$this->twig->set_phpbb_extensions($this->extension_manager->all_enabled());
|
||||
|
||||
// Clear previous cache files (while WIP)
|
||||
// @todo remove
|
||||
if (is_dir($this->cachepath))
|
||||
@ -182,7 +185,8 @@ class phpbb_template_twig implements phpbb_template
|
||||
{
|
||||
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…
x
Reference in New Issue
Block a user