registerArgument('action', 'string', 'Target action'); $this->registerArgument('arguments', 'array', 'Arguments for the controller action', false, []); $this->registerArgument('controller', 'string', 'Target controller'); $this->registerArgument('extensionName', 'string', 'Target extension name', false, 'epproducts'); $this->registerArgument('pluginName', 'string', 'Target plugin name', false, 'Ajax'); $this->registerArgument('pageUid', 'int', 'Target page, defaults to the root page'); $this->registerArgument('format', 'string', 'The requested format, json or html', false, 'json'); } public function render(): string { $arguments = $this->arguments; // Determine page type from format argument if (strtolower(trim($arguments['format'])) === 'json') { $arguments['pageType'] = self::PAGE_TYPE_JSON; } else { $arguments['pageType'] = self::PAGE_TYPE_HTML; } // Reset argument to keep it out of resulting url unset($arguments['format']); // Use root page uid as target unless provided if ($arguments['pageUid'] === null) { /** @var ServerRequestInterface $request */ $request = $this->renderingContext->getAttribute(ServerRequestInterface::class); $rootlineUtility = new RootlineUtility($request->getAttribute('frontend.page.information')->getId()); $rootline = $rootlineUtility->get(); $rootPage = array_pop($rootline); $arguments['pageUid'] = $rootPage['uid']; } // Force absolute urls $arguments['absolute'] = true; return (string)$this->renderingContext->getViewHelperInvoker()->invoke( ActionViewHelper::class, $arguments, $this->renderingContext, $this->buildRenderChildrenClosure() ); } }