From 741b565c7b0cd4b003c6f5cfa8719c4446853e6e Mon Sep 17 00:00:00 2001 From: Christian Kuhn <lolli@schwarzbu.ch> Date: Mon, 2 Mar 2015 12:24:05 +0100 Subject: [PATCH] [TASK] Fluid RenderViewHelper compilable Resolves: #65451 Releases: master Change-Id: Ia08ec9b586a2b080763f07ee2fe6e257ca484397 Reviewed-on: http://review.typo3.org/37453 Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch> Tested-by: Christian Kuhn <lolli@schwarzbu.ch> Reviewed-by: Anja Leichsenring <aleichsenring@ab-softlab.de> Tested-by: Anja Leichsenring <aleichsenring@ab-softlab.de> Reviewed-by: Helmut Hummel <helmut.hummel@typo3.org> Tested-by: Helmut Hummel <helmut.hummel@typo3.org> --- .../Classes/ViewHelpers/RenderViewHelper.php | 46 ++++++++++++++++--- .../Unit/ViewHelpers/RenderViewHelperTest.php | 6 +-- 2 files changed, 42 insertions(+), 10 deletions(-) diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/RenderViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/RenderViewHelper.php index 81e7ea01a3c9..51c004fb635b 100644 --- a/typo3/sysext/fluid/Classes/ViewHelpers/RenderViewHelper.php +++ b/typo3/sysext/fluid/Classes/ViewHelpers/RenderViewHelper.php @@ -11,6 +11,10 @@ namespace TYPO3\CMS\Fluid\ViewHelpers; * The TYPO3 project - inspiring people to share! * * */ +use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper; +use TYPO3\CMS\Fluid\Core\ViewHelper\Facets\CompilableInterface; +use TYPO3\CMS\Fluid\Core\Rendering\RenderingContextInterface; + /** * ViewHelper that renders a section or a specified partial * @@ -69,7 +73,7 @@ namespace TYPO3\CMS\Fluid\ViewHelpers; * * @api */ -class RenderViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper { +class RenderViewHelper extends AbstractViewHelper implements CompilableInterface { /** * Renders the content. @@ -82,13 +86,39 @@ class RenderViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelp * @api */ public function render($section = NULL, $partial = NULL, $arguments = array(), $optional = FALSE) { - $arguments = $this->loadSettingsIntoArguments($arguments); + return self::renderStatic( + array( + 'section' => $section, + 'partial' => $partial, + 'arguments' => $arguments, + 'optional' => $optional, + ), + $this->buildRenderChildrenClosure(), + $this->renderingContext + ); + } + + /** + * Renders the content. + * + * @param array $arguments + * @param \Closure $renderChildrenClosure + * @param RenderingContextInterface $renderingContext + * @return string + */ + static public function renderStatic(array $arguments, \Closure $renderChildrenClosure, RenderingContextInterface $renderingContext) { + $section = $arguments['section']; + $partial = $arguments['partial']; + $optional = $arguments['optional']; + $arguments = static::loadSettingsIntoArguments($arguments['arguments'], $renderingContext); + $viewHelperVariableContainer = $renderingContext->getViewHelperVariableContainer(); if ($partial !== NULL) { - return $this->viewHelperVariableContainer->getView()->renderPartial($partial, $section, $arguments); + return $viewHelperVariableContainer->getView()->renderPartial($partial, $section, $arguments); } elseif ($section !== NULL) { - return $this->viewHelperVariableContainer->getView()->renderSection($section, $arguments, $optional); + return $viewHelperVariableContainer->getView()->renderSection($section, $arguments, $optional); } + return ''; } @@ -96,11 +126,13 @@ class RenderViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelp * If $arguments['settings'] is not set, it is loaded from the TemplateVariableContainer (if it is available there). * * @param array $arguments + * @param RenderingContextInterface $renderingContext * @return array */ - protected function loadSettingsIntoArguments($arguments) { - if (!isset($arguments['settings']) && $this->templateVariableContainer->exists('settings')) { - $arguments['settings'] = $this->templateVariableContainer->get('settings'); + static protected function loadSettingsIntoArguments($arguments, RenderingContextInterface $renderingContext) { + $templateVariableContainer = $renderingContext->getTemplateVariableContainer(); + if (!isset($arguments['settings']) && $templateVariableContainer->exists('settings')) { + $arguments['settings'] = $templateVariableContainer->get('settings'); } return $arguments; } diff --git a/typo3/sysext/fluid/Tests/Unit/ViewHelpers/RenderViewHelperTest.php b/typo3/sysext/fluid/Tests/Unit/ViewHelpers/RenderViewHelperTest.php index 415c1da21175..7a7ae2dc4ec2 100644 --- a/typo3/sysext/fluid/Tests/Unit/ViewHelpers/RenderViewHelperTest.php +++ b/typo3/sysext/fluid/Tests/Unit/ViewHelpers/RenderViewHelperTest.php @@ -42,7 +42,7 @@ class RenderViewHelperTest extends \TYPO3\CMS\Fluid\Tests\Unit\ViewHelpers\ViewH ); $this->templateVariableContainer->add('settings', 'theSettings'); - $actual = $this->viewHelper->_call('loadSettingsIntoArguments', $arguments); + $actual = $this->viewHelper->_call('loadSettingsIntoArguments', $arguments, $this->renderingContext); $this->assertEquals($expected, $actual); } @@ -60,7 +60,7 @@ class RenderViewHelperTest extends \TYPO3\CMS\Fluid\Tests\Unit\ViewHelpers\ViewH ); $this->templateVariableContainer->add('settings', 'theSettings'); - $actual = $this->viewHelper->_call('loadSettingsIntoArguments', $arguments); + $actual = $this->viewHelper->_call('loadSettingsIntoArguments', $arguments, $this->renderingContext); $this->assertEquals($expected, $actual); } @@ -75,7 +75,7 @@ class RenderViewHelperTest extends \TYPO3\CMS\Fluid\Tests\Unit\ViewHelpers\ViewH 'someArgument' => 'someValue' ); - $actual = $this->viewHelper->_call('loadSettingsIntoArguments', $arguments); + $actual = $this->viewHelper->_call('loadSettingsIntoArguments', $arguments, $this->renderingContext); $this->assertEquals($expected, $actual); } -- GitLab