Skip to content

Commit

Permalink
MenuControl: added key 'link' to items
Browse files Browse the repository at this point in the history
  • Loading branch information
janpecha committed May 14, 2024
1 parent d714fbc commit a3db0b7
Showing 1 changed file with 29 additions and 13 deletions.
42 changes: 29 additions & 13 deletions src/MenuControl.php
Original file line number Diff line number Diff line change
Expand Up @@ -129,15 +129,14 @@ public function setIgnoredPages(array $ignoredPages = NULL)
*/
public function render()
{
$items = [];
$subTree = $this->findSubTree();

if ($subTree === NULL) { // no subtree => no items
return;
}

$menuPages = $this->navigation->getMenuPages();
$this->prepareItems($items, $menuPages, $subTree);
$items = $this->prepareItems($menuPages, $subTree);

$template = $this->createTemplate();
assert($template instanceof \Nette\Bridges\ApplicationLatte\Template);
Expand All @@ -153,29 +152,32 @@ public function render()


/**
* @param array<array{
* page: NavigationPage,
* active: bool,
* level: int,
* }> $items
* @param array<string, NavigationPage> $menuPages
* @param string $subTree
* @param int $level
* @return void
* @return array<array{
* page: NavigationPage,
* active: bool,
* level: int,
* link: ILink|NULL,
* }>
*/
private function prepareItems(
array &$items,
array $menuPages,
$subTree,
$level = 0
)
{
$items = [];

foreach ($menuPages as $pageId => $page) {
if (isset($this->ignoredPages[$pageId])) {
continue;
}

if ($page->isChildOf($subTree)) {
if (!$page->isChildOf($subTree)) {
continue;
}
$active = FALSE;

if ($page->isHomepage()) {
Expand All @@ -185,17 +187,31 @@ private function prepareItems(
$active = $this->navigation->isPageActive($pageId);
}

$items[] = [
$item = [
'page' => $page,
'active' => $active,
'level' => $level,
'link' => $page->getLink(),
];
$subItems = $pageId !== '' ? $this->prepareItems($menuPages, $pageId, $level + 1) : [];

if ($item['link'] === NULL) {
foreach ($subItems as $subItem) {
if ($subItem['link'] !== NULL) {
$item['link'] = $subItem['link'];
break;
}
}
}

$items[] = $item;

if ($active && ($this->levelLimit === NULL || ($level + 1) < $this->levelLimit)) {
$this->prepareItems($items, $menuPages, $pageId, $level + 1);
$items = array_merge($items, $subItems);
}
}
}

return $items;
}


Expand Down

0 comments on commit a3db0b7

Please sign in to comment.