registerArgument('post', Post::class, 'The post to link to', true); $this->registerArgument('returnUri', 'bool', 'return only uri', false, false); $this->registerArgument('action', 'string', 'action to link', false, null); } public function render(): string { $request = $this->renderingContext->getAttribute(ServerRequestInterface::class); if (!$request instanceof ServerRequestInterface) { throw new \RuntimeException( 'ViewHelper ew:link.be.post needs a request implementing ServerRequestInterface.', 1684305293 ); } /** @var Post $post */ $post = $this->arguments['post']; switch ($this->arguments['action']) { case 'edit': $uri = (string)$this->uriBuilder->buildUriFromRoute('record_edit', [ 'edit' => ['pages' => [$post->getUid() => 'edit']], 'returnUrl' => $request->getAttribute('normalizedParams')->getRequestUri(), ]); break; default: $uri = (string)$this->uriBuilder->buildUriFromRoute('web_layout', [ 'id' => $post->getUid(), 'returnUrl' => $request->getAttribute('normalizedParams')->getRequestUri(), ]); break; } if (isset($this->arguments['returnUri']) && $this->arguments['returnUri'] === true) { return htmlspecialchars($uri, ENT_QUOTES | ENT_HTML5); } $linkText = $this->renderChildren() ?? ( $post->getTitle() !== '' ? $post->getTitle() : LocalizationUtility::translate('backend.message.nopost', 'blog') ); $this->tag->addAttribute('href', $uri); $this->tag->setContent($linkText); return $this->tag->render(); } }