/**
* Renders the link. Renders the linked node's label if there's no child content.
*
* @param mixed $node A node object, a string node path (absolute or relative), a string node://-uri or NULL
* @param string $format Format to use for the URL, for example "html" or "json"
* @param boolean $absolute If set, an absolute URI is rendered
* @param array $arguments Additional arguments to be passed to the UriBuilder (for example pagination parameters)
* @param string $section The anchor to be added to the URI
* @param boolean $addQueryString If set, the current query parameters will be kept in the URI
* @param array $argumentsToBeExcludedFromQueryString arguments to be removed from the URI. Only active if $addQueryString = TRUE
* @param string $nodeVariableName The variable the node will be assigned to for the rendered child content
* @param string $baseNodeName The name of the base node inside the TypoScript context to use for the ContentContext or resolving relative paths
* @param boolean $resolveShortcuts INTERNAL Parameter - if FALSE, shortcuts are not redirected to their target. Only needed on rare backend occasions when we want to link to the shortcut itself.
* @return string The rendered link
* @throws ViewHelperException
*/
public function render($node = null, $format = null, $absolute = false, array $arguments = array(), $section = '', $addQueryString = false, array $argumentsToBeExcludedFromQueryString = array(), $baseNodeName = 'documentNode', $nodeVariableName = 'linkedNode', $resolveShortcuts = true)
{
$baseNode = null;
if (!$node instanceof NodeInterface) {
$baseNode = $this->getContextVariable($baseNodeName);
if (is_string($node) && substr($node, 0, 7) === 'node://') {
$node = $this->linkingService->convertUriToObject($node, $baseNode);
}
}
try {
$uri = $this->linkingService->createNodeUri($this->controllerContext, $node, $baseNode, $format, $absolute, $arguments, $section, $addQueryString, $argumentsToBeExcludedFromQueryString, $resolveShortcuts);
$this->tag->addAttribute('href', $uri);
} catch (NeosException $exception) {
$this->systemLogger->logException($exception);
} catch (NoMatchingRouteException $exception) {
$this->systemLogger->logException($exception);
}
$linkedNode = $this->linkingService->getLastLinkedNode();
$this->templateVariableContainer->add($nodeVariableName, $linkedNode);
$content = $this->renderChildren();
$this->templateVariableContainer->remove($nodeVariableName);
if ($content === null && $linkedNode !== null) {
$content = $linkedNode->getLabel();
}
$this->tag->setContent($content);
$this->tag->forceClosingTag(true);
return $this->tag->render();
}