public static function buildMenuTree($theme)
{
if (self::$menuTreeCache !== null) {
return self::$menuTreeCache;
}
$key = self::getMenuCacheKey($theme);
$cached = Cache::get($key, false);
$unserialized = $cached ? @unserialize($cached) : false;
if ($unserialized !== false) {
return self::$menuTreeCache = $unserialized;
}
$menuTree = ['--root-pages--' => []];
$iterator = function ($items, $parent, $level) use(&$menuTree, &$iterator) {
$result = [];
foreach ($items as $item) {
$viewBag = $item->page->viewBag;
$pageCode = $item->page->getBaseFileName();
$pageUrl = Str::lower(RouterHelper::normalizeUrl(array_get($viewBag, 'url')));
$itemData = ['url' => $pageUrl, 'title' => array_get($viewBag, 'title'), 'mtime' => $item->page->mtime, 'items' => $iterator($item->subpages, $pageCode, $level + 1), 'parent' => $parent, 'navigation_hidden' => array_get($viewBag, 'navigation_hidden')];
if ($level == 0) {
$menuTree['--root-pages--'][] = $pageCode;
}
$result[] = $pageCode;
$menuTree[$pageCode] = $itemData;
}
return $result;
};
$pageList = new PageList($theme);
$iterator($pageList->getPageTree(), null, 0);
self::$menuTreeCache = $menuTree;
Cache::put($key, serialize($menuTree), Config::get('cms.parsedPageCacheTTL', 10));
return self::$menuTreeCache;
}