RainLab\Pages\Classes\Page::resolveMenuItem PHP Method

resolveMenuItem() public static method

Returns information about a menu item. The result is an array with the following keys: - url - the menu item URL. Not required for menu item types that return all available records. The URL should be returned relative to the website root and include the subdirectory, if any. Use the Cms::url() helper to generate the URLs. - isActive - determines whether the menu item is active. Not required for menu item types that return all available records. - items - an array of arrays with the same keys (url, isActive, items) + the title key. The items array should be added only if the $item's $nesting property value is TRUE.
public static resolveMenuItem ( RainLab\Pages\Classes\MenuItem $item, string $url, Cms\Classes\Theme $theme ) : mixed
$item RainLab\Pages\Classes\MenuItem Specifies the menu item.
$url string Specifies the current page URL, normalized, in lower case The URL is specified relative to the website root, it includes the subdirectory name, if any.
$theme Cms\Classes\Theme Specifies the current theme.
return mixed Returns an array. Returns null if the item cannot be resolved.
    public static function resolveMenuItem($item, $url, $theme)
    {
        $tree = self::buildMenuTree($theme);
        if ($item->type == 'static-page' && !isset($tree[$item->reference])) {
            return;
        }
        $result = [];
        if ($item->type == 'static-page') {
            $pageInfo = $tree[$item->reference];
            $result['url'] = Cms::url($pageInfo['url']);
            $result['mtime'] = $pageInfo['mtime'];
            $result['isActive'] = $result['url'] == $url;
        }
        if ($item->nesting || $item->type == 'all-static-pages') {
            $iterator = function ($items) use(&$iterator, &$tree, $url) {
                $branch = [];
                foreach ($items as $itemName) {
                    if (!isset($tree[$itemName])) {
                        continue;
                    }
                    $itemInfo = $tree[$itemName];
                    if ($itemInfo['navigation_hidden']) {
                        continue;
                    }
                    $branchItem = [];
                    $branchItem['url'] = Cms::url($itemInfo['url']);
                    $branchItem['isActive'] = $branchItem['url'] == $url;
                    $branchItem['title'] = $itemInfo['title'];
                    $branchItem['mtime'] = $itemInfo['mtime'];
                    if ($itemInfo['items']) {
                        $branchItem['items'] = $iterator($itemInfo['items']);
                    }
                    $branch[] = $branchItem;
                }
                return $branch;
            };
            $result['items'] = $iterator($item->type == 'static-page' ? $pageInfo['items'] : $tree['--root-pages--']);
        }
        return $result;
    }

Usage Example

示例#1
0
 public function boot()
 {
     Event::listen('cms.router.beforeRoute', function ($url) {
         return Controller::instance()->initCmsPage($url);
     });
     Event::listen('cms.page.beforeRenderPage', function ($controller, $page) {
         /*
          * Before twig renders
          */
         $twig = $controller->getTwig();
         $loader = $controller->getLoader();
         Controller::instance()->injectPageTwig($page, $loader, $twig);
         /*
          * Get rendered content
          */
         $contents = Controller::instance()->getPageContents($page);
         if (strlen($contents)) {
             return $contents;
         }
     });
     Event::listen('cms.page.initComponents', function ($controller, $page) {
         Controller::instance()->initPageComponents($controller, $page);
     });
     Event::listen('cms.block.render', function ($blockName, $blockContents) {
         $page = CmsController::getController()->getPage();
         if (!isset($page->apiBag['staticPage'])) {
             return;
         }
         $contents = Controller::instance()->getPlaceholderContents($page, $blockName, $blockContents);
         if (strlen($contents)) {
             return $contents;
         }
     });
     Event::listen('pages.menuitem.listTypes', function () {
         return ['static-page' => 'rainlab.pages::lang.menuitem.static_page', 'all-static-pages' => 'rainlab.pages::lang.menuitem.all_static_pages'];
     });
     Event::listen('pages.menuitem.getTypeInfo', function ($type) {
         if ($type == 'url') {
             return [];
         }
         if ($type == 'static-page' || $type == 'all-static-pages') {
             return StaticPage::getMenuTypeInfo($type);
         }
     });
     Event::listen('pages.menuitem.resolveItem', function ($type, $item, $url, $theme) {
         if ($type == 'static-page' || $type == 'all-static-pages') {
             return StaticPage::resolveMenuItem($item, $url, $theme);
         }
     });
     Event::listen('backend.form.extendFieldsBefore', function ($formWidget) {
         if ($formWidget->model instanceof \Cms\Classes\Partial) {
             Snippet::extendPartialForm($formWidget);
         }
     });
     Event::listen('cms.template.save', function ($controller, $template, $type) {
         Plugin::clearCache();
     });
     Event::listen('cms.template.processSettingsBeforeSave', function ($controller, $dataHolder) {
         $dataHolder->settings = Snippet::processTemplateSettingsArray($dataHolder->settings);
     });
     Event::listen('cms.template.processSettingsAfterLoad', function ($controller, $template) {
         Snippet::processTemplateSettings($template);
     });
     Event::listen('cms.template.processTwigContent', function ($template, $dataHolder) {
         if ($template instanceof \Cms\Classes\Layout) {
             $dataHolder->content = Controller::instance()->parseSyntaxFields($dataHolder->content);
         }
     });
     Event::listen('backend.richeditor.listTypes', function () {
         return ['static-page' => 'rainlab.pages::lang.menuitem.static_page'];
     });
     Event::listen('backend.richeditor.getTypeInfo', function ($type) {
         if ($type === 'static-page') {
             return StaticPage::getRichEditorTypeInfo($type);
         }
     });
 }