From 37e5894df2bbe9c773e5363407d863341075e3ff Mon Sep 17 00:00:00 2001 From: Sam Georges Date: Sat, 6 Sep 2014 17:10:52 +1000 Subject: [PATCH] The `{% put %}` tag now appends by default, The closing put tag now supports overwrite, eg: `{% endput overwrite %}`. --- CHANGELOG.md | 2 ++ modules/cms/twig/Extension.php | 4 ++-- modules/cms/twig/PutNode.php | 12 ++++++++---- modules/cms/twig/PutTokenParser.php | 9 ++++++++- 4 files changed, 20 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2c84c838f..14d404306 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,8 @@ * **Build 14x** (2014-09-xx) - Various fixes to the RelationController relating to belongsToMany relations. - Tree Lists are now collapsed by default to better handle large data sets. + - The `{% put %}` tag now appends by default. + - The closing put tag now supports **overwrite**, eg: `{% endput overwrite %}`. * **Build 141** (2014-09-04) - Add new `dump()` Twig function (config app.debug must be true). diff --git a/modules/cms/twig/Extension.php b/modules/cms/twig/Extension.php index 7d3ef5e81..3b78af578 100644 --- a/modules/cms/twig/Extension.php +++ b/modules/cms/twig/Extension.php @@ -209,8 +209,8 @@ class Extension extends Twig_Extension /** * Closes a layout block. */ - public function endBlock() + public function endBlock($append = true) { - Block::endBlock(); + Block::endBlock($append); } } \ No newline at end of file diff --git a/modules/cms/twig/PutNode.php b/modules/cms/twig/PutNode.php index ad224571f..30ad241b2 100644 --- a/modules/cms/twig/PutNode.php +++ b/modules/cms/twig/PutNode.php @@ -12,9 +12,9 @@ use Twig_NodeInterface; */ class PutNode extends Twig_Node { - public function __construct(Twig_NodeInterface $body, $name, $lineno, $tag = 'put') + public function __construct(Twig_NodeInterface $body, $name, $endType, $lineno, $tag = 'put') { - parent::__construct(['body' => $body], ['name' => $name], $lineno, $tag); + parent::__construct(['body' => $body], ['name' => $name, 'endType' => $endType], $lineno, $tag); } /** @@ -31,11 +31,15 @@ class PutNode extends Twig_Node ->write(");\n") ; + $isOverwrite = strtolower($this->getAttribute('endType')) == 'overwrite'; + $compiler->subcompile($this->getNode('body')); $compiler ->addDebugInfo($this) - ->write("echo \$this->env->getExtension('CMS')->endBlock();\n") - ; + ->write("echo \$this->env->getExtension('CMS')->endBlock(") + ->raw($isOverwrite ? 'false' : 'true') + ->write(");\n") + ; } } \ No newline at end of file diff --git a/modules/cms/twig/PutTokenParser.php b/modules/cms/twig/PutTokenParser.php index 41ec84495..3fc39354d 100644 --- a/modules/cms/twig/PutTokenParser.php +++ b/modules/cms/twig/PutTokenParser.php @@ -33,13 +33,20 @@ class PutTokenParser extends Twig_TokenParser */ public function parse(Twig_Token $token) { + $lineno = $token->getLine(); $stream = $this->parser->getStream(); $name = $stream->expect(Twig_Token::NAME_TYPE)->getValue(); $stream->expect(Twig_Token::BLOCK_END_TYPE); $body = $this->parser->subparse([$this, 'decidePutEnd'], true); + + $endType = null; + if ($token = $stream->nextIf(Twig_Token::NAME_TYPE)) { + $endType = $token->getValue(); + } + $stream->expect(Twig_Token::BLOCK_END_TYPE); - return new PutNode($body, $name, $token->getLine(), $this->getTag()); + return new PutNode($body, $name, $endType, $lineno, $this->getTag()); } public function decidePutEnd(Twig_Token $token)