public function render()
{
$defaultUid = $GLOBALS['TSFE']->id;
$showAccessProtected = (bool) $this->arguments['showAccessProtected'];
$pageUid = (int) (null !== $this->arguments['pageUid'] ? $this->arguments['pageUid'] : $defaultUid);
$currentUid = (int) ($this->arguments['currentPageUid'] ? $this->arguments['currentPageUid'] : $defaultUid);
$currentPage = $this->pageService->getPage($currentUid, $showAccessProtected);
$parentUid = (int) (null !== $this->arguments['pageUid'] ? $pageUid : $currentPage['pid']);
$parentPage = $this->pageService->getPage($parentUid, $showAccessProtected);
$menuData = $this->getMenu($parentUid);
$pageUids = array_keys($menuData);
$uidCount = count($pageUids);
$firstUid = $pageUids[0];
$lastUid = $pageUids[$uidCount - 1];
$nextUid = null;
$prevUid = null;
for ($i = 0; $i < $uidCount; $i++) {
if ((int) $pageUids[$i] === $currentUid) {
if ($i > 0) {
$prevUid = $pageUids[$i - 1];
}
if ($i < $uidCount) {
$nextUid = $pageUids[$i + 1];
}
break;
}
}
$pages = [];
if (true === (bool) $this->arguments['renderFirst']) {
$pages['first'] = $menuData[$firstUid];
}
if (null !== $prevUid) {
$pages['prev'] = $menuData[$prevUid];
}
if (true === (bool) $this->arguments['renderUp']) {
$pages['up'] = $parentPage;
}
if (null !== $nextUid) {
$pages['next'] = $menuData[$nextUid];
}
if (true === (bool) $this->arguments['renderLast']) {
$pages['last'] = $menuData[$lastUid];
}
$menuItems = $this->parseMenu($pages);
$menu = [];
if (true === isset($pages['first'])) {
$menu['first'] = $menuItems['first'];
$menu['first']['linktext'] = $this->getCustomLabelOrPageTitle('labelFirst', $menuItems['first']);
}
if (true === isset($pages['prev'])) {
$menu['prev'] = $menuItems['prev'];
$menu['prev']['linktext'] = $this->getCustomLabelOrPageTitle('labelPrevious', $menuItems['prev']);
}
if (true === isset($pages['up'])) {
$menu['up'] = $menuItems['up'];
$menu['up']['linktext'] = $this->getCustomLabelOrPageTitle('labelUp', $menuItems['up']);
}
if (true === isset($pages['next'])) {
$menu['next'] = $menuItems['next'];
$menu['next']['linktext'] = $this->getCustomLabelOrPageTitle('labelNext', $menuItems['next']);
}
if (true === isset($pages['last'])) {
$menu['last'] = $menuItems['last'];
$menu['last']['linktext'] = $this->getCustomLabelOrPageTitle('labelLast', $menuItems['last']);
}
$this->backupVariables();
$this->templateVariableContainer->add($this->arguments['as'], $menu);
$output = $this->renderContent($menu);
$this->templateVariableContainer->remove($this->arguments['as']);
$this->restoreVariables();
return $output;
}