RainLab\Pages\Classes\Page::buildMenuTree PHP 메소드

buildMenuTree() 공개 정적인 메소드

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.
리턴 array Returns an array containing the page information
    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;
    }

Usage Example

예제 #1
0
 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;
     }
 }
All Usage Examples Of RainLab\Pages\Classes\Page::buildMenuTree