/** * Call the view helper associated with this object. * * First, it evaluates the arguments of the view helper. * * If the view helper implements Tx_Fluid_Core_ViewHelper_Facets_ChildNodeAccessInterface, * it calls setChildNodes(array childNodes) on the view helper. * * Afterwards, checks that the view helper did not leave a variable lying around. * * @param Tx_Fluid_Core_Rendering_RenderingContextInterface $renderingContext * @return object evaluated node after the view helper has been called. * @author Sebastian Kurfürst <*****@*****.**> * @author Karsten Dambekalns <*****@*****.**> * @todo check recreation of viewhelper when revisiting caching */ public function evaluate(Tx_Fluid_Core_Rendering_RenderingContextInterface $renderingContext) { $objectManager = $renderingContext->getObjectManager(); $contextVariables = $renderingContext->getTemplateVariableContainer()->getAllIdentifiers(); if ($this->viewHelpersByContext->contains($renderingContext)) { $viewHelper = $this->viewHelpersByContext[$renderingContext]; } else { $viewHelper = clone $this->uninitializedViewHelper; $this->viewHelpersByContext->attach($renderingContext, $viewHelper); } $evaluatedArguments = array(); $renderMethodParameters = array(); if (count($viewHelper->prepareArguments())) { foreach ($viewHelper->prepareArguments() as $argumentName => $argumentDefinition) { if (isset($this->arguments[$argumentName])) { $argumentValue = $this->arguments[$argumentName]; $evaluatedArguments[$argumentName] = $this->convertArgumentValue($argumentValue, $argumentDefinition->getType(), $renderingContext); } else { $evaluatedArguments[$argumentName] = $argumentDefinition->getDefaultValue(); } if ($argumentDefinition->isMethodParameter()) { $renderMethodParameters[$argumentName] = $evaluatedArguments[$argumentName]; } } } $viewHelperArguments = $objectManager->create('Tx_Fluid_Core_ViewHelper_Arguments', $evaluatedArguments); $viewHelper->setArguments($viewHelperArguments); $viewHelper->setTemplateVariableContainer($renderingContext->getTemplateVariableContainer()); if ($renderingContext->getControllerContext() !== NULL) { $viewHelper->setControllerContext($renderingContext->getControllerContext()); } $viewHelper->setViewHelperVariableContainer($renderingContext->getViewHelperVariableContainer()); $viewHelper->setViewHelperNode($this); $viewHelper->setRenderingContext($renderingContext); if ($viewHelper instanceof Tx_Fluid_Core_ViewHelper_Facets_ChildNodeAccessInterface) { $viewHelper->setChildNodes($this->childNodes); } $output = $viewHelper->initializeArgumentsAndRender($renderMethodParameters); return $output; }