diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/RenderViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/RenderViewHelper.php index 81e7ea01a3c9a10d369d557d1c73a035be04b46d..51c004fb635bc5ec32b1727441a66e7d62a0af93 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 415c1da2117560a429bc36ebf72f163e0aa694c0..7a7ae2dc4ec260d3bf956e9477409250849c427d 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); }