public override SubNavigationMenuModel GetMenu() { if (IsHomePage(CurrentPage) || IsShowInHomeNavigation(CurrentPage)) { return(null); } var contentUnderHeading = CurrentPage.AncestorsOrSelf().SingleOrDefault(pc => pc.Parent != null && pc.Parent.IsHeading()); var subMenuStartPage = contentUnderHeading ?? CurrentPage.AncestorsOrSelf().SingleOrDefault(pc => pc.Parent != null && IsHomePage(pc.Parent)); if (subMenuStartPage == null) { return(null); } var model = new SubNavigationMenuModel { Rows = GetSubNavigationMenuRows(subMenuStartPage, _groupHelper.IsGroupPage(subMenuStartPage)), Parent = IsHomePage(CurrentPage.Parent) || IsContentUnavailable(CurrentPage.Parent) ? null : MapToMenuItemModel(CurrentPage.Parent), Title = GetNavigationName(subMenuStartPage), IsTitleHidden = IsTitleHidden(subMenuStartPage), ShowBreadcrumbs = IsShowBreadcrumbs(CurrentPage) }; return(model); }
protected virtual IEnumerable <SubNavigationMenuRowModel> GetSubNavigationMenuRows(IPublishedContent subMenuStartPage, bool isGroupSubNavigation) { if (!subMenuStartPage.IsContentPage() && !_groupHelper.IsGroupPage(subMenuStartPage)) { return(Enumerable.Empty <SubNavigationMenuRowModel>()); } var activeItems = CurrentPage.AncestorsOrSelf().Where(pc => !pc.IsHeading() && !IsHomePage(pc)).ToList(); var menuRows = activeItems .Select(selectedItem => { var availableContent = GetAvailableContent(selectedItem.Children); if (isGroupSubNavigation) { return(ValidateGroupSubNavigationItems(availableContent).Select(MapToSubNavigationMenuItemModel)); } return(availableContent.Select(MapToSubNavigationMenuItemModel)); }) .Select(menuItems => new SubNavigationMenuRowModel { Items = menuItems.ToList() }) .ToList(); menuRows.Reverse(); var topLevelMenuRow = menuRows.First(); topLevelMenuRow.Items.Insert(0, MapToSubNavigationMenuItemModel(subMenuStartPage)); return(menuRows); }
protected virtual IEnumerable <MenuItemModel> BuildLeftMenuTree(IPublishedContent parent, IList <int> excludeContentIds) { if (!parent.Children.Any()) { yield break; } var children = GetAvailableContent(parent.Children).Where(pContent => !excludeContentIds.Contains(pContent.Id)); var activeMenuItem = CurrentPage.AncestorsOrSelf().FirstOrDefault(pc => !IsHideFromNavigation(pc)); foreach (var child in children) { var isHeading = child.IsHeading(); var newMenuItem = new MenuItemModel { Id = child.Id, Name = GetNavigationName(child), Url = isHeading ? string.Empty : child.Url, IsActive = child == activeMenuItem, IsHeading = isHeading, Children = BuildLeftMenuTree(child, excludeContentIds).ToList() }; yield return(newMenuItem); } }