protected function autoRender(array $menu, $level = 1)
{
$tagName = $this->arguments['tagNameChildren'];
$this->tag->setTagName($this->getWrappingTagName());
$html = [];
$levels = (int) $this->arguments['levels'];
$showCurrent = (bool) $this->arguments['showCurrent'];
$expandAll = (bool) $this->arguments['expandAll'];
$itemsRendered = 0;
$numberOfItems = count($menu);
foreach ($menu as $page) {
if ($page['current'] && !$showCurrent) {
continue;
}
$class = trim($page['class']) !== '' ? ' class="' . trim($page['class']) . '"' : '';
$elementId = $this->arguments['substElementUid'] ? ' id="elem_' . $page['uid'] . '"' : '';
if (!$this->isNonWrappingMode()) {
$html[] = '<' . $tagName . $elementId . $class . '>';
}
$html[] = $this->renderItemLink($page);
if (($page['active'] || $expandAll) && $page['hasSubPages'] && $level < $levels) {
$subPages = $this->getMenu($page['uid']);
$subMenu = $this->parseMenu($subPages);
if (0 < count($subMenu)) {
$renderedSubMenu = $this->autoRender($subMenu, $level + 1);
$parentTagId = $this->tag->getAttribute('id');
if (!empty($parentTagId)) {
$this->tag->addAttribute('id', $parentTagId . '-lvl-' . $level);
}
$this->tag->setTagName($this->getWrappingTagName());
$this->tag->setContent($renderedSubMenu);
$this->tag->addAttribute('class', (!empty($this->arguments['class']) ? $this->arguments['class'] . ' lvl-' : 'lvl-') . $level);
$html[] = $this->tag->render();
$this->tag->addAttribute('class', $this->arguments['class']);
if (!empty($parentTagId)) {
$this->tag->addAttribute('id', $parentTagId);
}
}
}
if (false === $this->isNonWrappingMode()) {
$html[] = '</' . $tagName . '>';
}
$itemsRendered++;
if (true === isset($this->arguments['divider']) && $itemsRendered < $numberOfItems) {
$divider = $this->arguments['divider'];
if (!$this->isNonWrappingMode()) {
$html[] = '<' . $tagName . '>' . $divider . '</' . $tagName . '>';
} else {
$html[] = $divider;
}
}
}
return implode(LF, $html);
}