This method is used internally for menu items and breadcrumbs.
public static buildMenuTree ( Cms\Classes\Theme $theme ) : array | ||
$theme | Cms\Classes\Theme | Specifies the current theme. |
return | array | Returns an array containing the page information |
public function onRun() { $url = $this->getRouter()->getUrl(); if (!strlen($url)) { $url = '/'; } $theme = Theme::getActiveTheme(); $router = new Router($theme); $page = $router->findByUrl($url); if ($page) { $tree = StaticPageClass::buildMenuTree($theme); $code = $startCode = $page->getBaseFileName(); $breadcrumbs = []; while ($code) { if (!isset($tree[$code])) { continue; } $pageInfo = $tree[$code]; if ($pageInfo['navigation_hidden']) { $code = $pageInfo['parent']; continue; } $reference = new MenuItemReference(); $reference->title = $pageInfo['title']; $reference->url = URL::to($pageInfo['url']); $reference->isActive = $code == $startCode; $breadcrumbs[] = $reference; $code = $pageInfo['parent']; } $breadcrumbs = array_reverse($breadcrumbs); $this->breadcrumbs = $this->page['breadcrumbs'] = $breadcrumbs; } }
public function getPageUrlOptions() { $currentTheme = Theme::getEditTheme(); $allThemePages = Page::listInTheme($currentTheme, true); $options = []; foreach ($allThemePages as $p) { $options['url=' . $p->url . '&type=cms_pages'] = $p->title; } $tree = StaticPageClass::buildMenuTree($currentTheme); foreach ($tree as $key => $page) { if (isset($page['title']) && isset($page['url'])) { $options['url=' . $page['url'] . '&type=pages_plugin'] = $page['title']; } } return $options; }