17 use TYPO3Fluid\Fluid\Component\ComponentInterface;
18 use TYPO3Fluid\Fluid\Core\Compiler\TemplateCompiler;
19 use TYPO3Fluid\Fluid\Core\Parser\SyntaxTree\ViewHelperNode;
20 use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
21 use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;
83 $this->widgetContext = $this->objectManager->get(\
TYPO3\CMS\Fluid\Core\Widget\WidgetContext::class);
101 $this->registerArgument(
104 'extend the widget identifier with a custom widget id',
118 $this->validateArguments();
121 return $this->callRenderMethod();
131 public function evaluate(RenderingContextInterface $renderingContext)
133 $this->renderingContext = $renderingContext;
134 $this->getArguments()->setRenderingContext($renderingContext);
136 return $this->callRenderMethod();
147 public function onClose(RenderingContextInterface $renderingContext): ComponentInterface
149 $node = parent::onClose($renderingContext);
150 $rootNode = $this->objectManager->get(\
TYPO3Fluid\Fluid\Core\Parser\SyntaxTree\RootNode::class);
151 $rootNode->setChildren($this->getChildren());
152 $this->widgetContext->setViewHelperChildNodes($rootNode, $renderingContext);
163 $this->widgetContext->setControllerObjectName(get_class($this->controller));
164 $vendorName = $this->renderingContext->getControllerContext()->getRequest()->getControllerVendorName();
165 $extensionName = $this->renderingContext->getControllerContext()->getRequest()->getControllerExtensionName();
166 $pluginName = $this->renderingContext->getControllerContext()->getRequest()->getPluginName();
167 $this->widgetContext->setParentVendorName($vendorName);
168 $this->widgetContext->setParentExtensionName($extensionName);
169 $this->widgetContext->setParentPluginName($pluginName);
170 $pluginNamespace = $this->extensionService->getPluginNamespace($extensionName, $pluginName);
171 $this->widgetContext->setParentPluginNamespace($pluginNamespace);
172 $this->widgetContext->setWidgetViewHelperClassName(static::class);
173 if ($this->ajaxWidget ===
true) {
174 $this->ajaxWidgetContextHolder->store($this->widgetContext);
187 $rootNode = $this->objectManager->get(\
TYPO3Fluid\Fluid\Core\Parser\SyntaxTree\RootNode::class);
188 foreach ($childNodes as $childNode) {
189 $rootNode->addChildNode($childNode);
191 $this->widgetContext->setViewHelperChildNodes($rootNode, $this->renderingContext);
201 return $this->arguments;
213 if (!isset($this->controller) || !$this->controller instanceof \
TYPO3\CMS\Fluid\Core\Widget\AbstractWidgetController) {
214 throw new \TYPO3\CMS\Fluid\Core\Widget\Exception\MissingControllerException(
215 'initiateSubRequest() can not be called if there is no valid controller extending ' .
216 'TYPO3\\CMS\\Fluid\\Core\\Widget\\AbstractWidgetController' .
217 ' Got "' . ($this->controller ? get_class($this->controller) : gettype($this->controller)) .
218 '" in class "' . static::class .
'".',
222 $subRequest = $this->objectManager->get(\
TYPO3\CMS\Fluid\Core\Widget\WidgetRequest::class);
223 $subRequest->setWidgetContext($this->widgetContext);
225 $subResponse = $this->objectManager->get(\
TYPO3\CMS\
Extbase\Mvc\Web\Response::class);
226 $this->controller->processRequest($subRequest, $subResponse);
237 $arguments = $this->renderingContext->getControllerContext()->getRequest()->getArguments();
238 $widgetIdentifier = $this->widgetContext->getWidgetIdentifier();
239 if (isset($arguments[$widgetIdentifier])) {
240 if (isset($arguments[$widgetIdentifier][
'action'])) {
241 $subRequest->setControllerActionName($arguments[$widgetIdentifier][
'action']);
242 unset($arguments[$widgetIdentifier][
'action']);
244 $subRequest->setArguments($arguments[$widgetIdentifier]);
257 $viewHelperVariableContainer = $this->renderingContext->getViewHelperVariableContainer();
258 $widgetCounter = $viewHelperVariableContainer->get(\
TYPO3\CMS\Fluid\Core\Widget\AbstractWidgetViewHelper::class,
'nextWidgetNumber', 0);
259 $widgetIdentifier =
'@widget_' . ((isset($this->arguments[
'customWidgetId']) && $this->arguments[
'customWidgetId'] !==
null) ? $this->arguments[
'customWidgetId'] .
'_' :
'') . $widgetCounter;
260 $viewHelperVariableContainer->addOrUpdate(\
TYPO3\CMS\Fluid\Core\Widget\AbstractWidgetViewHelper::class,
'nextWidgetNumber', $widgetCounter + 1);
261 $this->widgetContext->setWidgetIdentifier($widgetIdentifier);
272 public function compile($argumentsName, $closureName, &$initializationPhpCode, ViewHelperNode $node, TemplateCompiler $compiler)
274 $compiler->disable();