private static MenuItem GetMenuItemRecursive(Page page, ICollection<Id> menuIds) { var result = GetMenuItem(page); if (result == null) return null; result.Selected = page.Id == menuIds.Last(); var children = page.GetChildren<Page>().Where(c => !c.GetValue<bool>("hideFromMenu")).ToArray(); if (children.Any()) { if (menuIds.Contains(page.Id)) { result.Expanded = true; foreach (var child in children) { var childItem = GetMenuItemRecursive(child, menuIds); if (childItem != null) result.AddChild(childItem); } } else result.Collapsed = true; } return result; }
public IEnumerable<MenuItem> GetSubMenuItems(Page parentPage) { var homeParts = CmsService.Instance.GetHomeItem().Path.Split('/'); if (parentPage == null) parentPage = CmsService.Instance.GetItem<Page>(); var pageParts = parentPage.Path.Split('/'); if (pageParts.Length - homeParts.Length < 1) return new MenuItem[0]; var selectedIds = CmsService.Instance.GetSelectedMenuIds(); var result = new List<MenuItem>(); foreach (var child in parentPage.GetChildren<Page>().Where(c => !c.GetValue<bool>("hideFromMenu") && !c.EntityName.StartsWith("__"))) { var menuItem = GetMenuItem(child); if (child.Id == selectedIds.Last()) menuItem.Selected = true; else if (selectedIds.Contains(child.Id)) menuItem.Expanded = true; result.Add(menuItem); } return result; }