private static void AddChildMenuItems(StringBuilder sb, TridionSiteMapNode node, int deep, List <int> itemTypes) { // Iterate through childnodes if (!node.HasChildNodes) { return; } foreach (TridionSiteMapNode childNode in node.ChildNodes) { if (itemTypes.Contains(new TcmUri(childNode.Key).ItemTypeId)) { if (childNode.Url.Contains(ConfigurationManager.AppSettings["DD4T.DefaultPage"])) { continue; } AddMenuItem(sb, childNode, null, null); if (deep > 0 && childNode.HasChildNodes) { var liNodes = new StringBuilder(); AddChildMenuItems(liNodes, childNode, deep - 1, itemTypes); if (liNodes.Length > 0) { var ul = new TagBuilder("ul"); ul.InnerHtml = liNodes.ToString(); sb.Append(ul.ToString()); } } } } }
private static bool TryFindActiveNode(SiteMapNode mainnode, string key, out SiteMapNode result) { TridionSiteMapProvider provider = (TridionSiteMapProvider)mainnode.Provider; SiteMapNode current = null; if (string.IsNullOrEmpty(key) || !provider.NodeDictionary.TryGetValue(key, out current)) { LoggerService.Warning("SiteMapNode '{0}' not found in TryFindActiveNode.", key); result = null; return(false); } TridionSiteMapNode currentT = (TridionSiteMapNode)current; if (currentT.Level < 3) // we are in the Home sg, no way to find out what the left menu should be { result = null; return(false); } while (currentT.Level > 3) { currentT = currentT.ParentNode as TridionSiteMapNode; } result = currentT; return(true); }
private static void AddMenuItem(StringBuilder sb, TridionSiteMapNode node, string submenu, string cssClass) { var li = new TagBuilder("li"); var a = new TagBuilder("a"); var span = new TagBuilder("span"); span.Attributes.Add("class", cssClass); var span2 = new TagBuilder("span"); span2.Attributes.Add("class", "arrow icon"); span.InnerHtml = node.Title; if (cssClass != null) { a.InnerHtml = span + span2.ToString(); } string href = null; if (node.Attributes["RedirectUrl"] != null) { href = node.Attributes["RedirectUrl"]; } else { href = RootType.ToLower().Equals("structure") ? General.AdjustUrlToContext(node.Url) : General.AdjustUrlToContext(node.ResolvedUrl); } a.Attributes.Add("href", href); if (cssClass == null) { a.InnerHtml = node.Title; } if (submenu == null) { li.InnerHtml = a.ToString(); } else { li.InnerHtml = a + submenu; } sb.AppendLine(li.ToString()); }
private static TridionSiteMapNode FindMainParentNode(TridionSiteMapNode childnode) { if (childnode == null) { return(null); } TridionSiteMapNode currentNode = childnode; while (currentNode.ParentNode != null && currentNode.Level > 2) { currentNode = (TridionSiteMapNode)currentNode.ParentNode; } return(currentNode); }
private static HtmlString CreateLeftMenu(SiteMapNode siteMapNode, ViewContext viewContext, IPage model) { // Only render when node has childnodes if (!siteMapNode.HasChildNodes) { return(null); } SiteMapNode parentNode; TridionSiteMapNode parentTridionNode; TridionSiteMapNode startingNode = null; string structureGroupId = model.StructureGroup.Id; if (SiteMapHelper.TryFindActiveNode(siteMapNode, structureGroupId, out parentNode)) { parentTridionNode = (TridionSiteMapNode)parentNode; if (parentTridionNode.Level > 2) { startingNode = FindMainParentNode(parentTridionNode); } else if (parentTridionNode.Level == 2) { startingNode = parentTridionNode; } else { return(new MvcHtmlString(string.Format("<!-- error: cannot generate left menu for pages on level {0} -->", parentTridionNode.Level))); } } else { return(null); } StringBuilder result = new StringBuilder(); AddChildMenuItems(result, startingNode, 2); TagBuilder navUl = new TagBuilder("ul"); navUl.Attributes.Add("class", "left-navigation"); navUl.InnerHtml = result.ToString(); // Return unordered list return(new HtmlString(navUl.ToString())); }
private static void AddMenuItem(StringBuilder sb, TridionSiteMapNode node, string submenu) { TagBuilder li = new TagBuilder("li"); TagBuilder a = new TagBuilder("a"); a.Attributes.Add("href", node.ResolvedUrl); a.InnerHtml = node.Title; if (submenu == null) { li.InnerHtml = a.ToString(); } else { li.InnerHtml = a.ToString() + submenu; } sb.Append(li.ToString()); }
public string GetTitle(TridionSiteMapNode node) { string title = null; string pageUri = null; if (node.Attributes["type"].Equals("64")) { pageUri = node.Attributes["id"]; } else { var landingPageNode = node.ChildNodes .Cast <TridionSiteMapNode>() .FirstOrDefault(tn => tn.Attributes["type"].Equals("64") && tn.Title.StartsWith("000 ")); if (landingPageNode != null) { pageUri = landingPageNode.Attributes["id"]; } } if (!String.IsNullOrEmpty(pageUri)) { IPage landingPage; if (pageFactory.TryGetPage(pageUri, out landingPage)) { var landingCp = landingPage.ComponentPresentations.FirstOrDefault(); if (landingCp != null) { var component = componentFactory.GetComponent(landingCp.Component.Id, landingCp.ComponentTemplate.Id); title = component.Fields["Heading"].Value; } } } if (String.IsNullOrEmpty(title)) { title = node.Title.Remove(0, 4); } return(title); }
private static HtmlString CreateTopMenu(SiteMapNode siteMapNode, ViewContext viewContext, IPage model) { // Only render when node has childnodes if (!siteMapNode.HasChildNodes) { return(null); } // write out the Home node separately (in the sitemap, it is on a level by its own, but in the html it is a sibling of the first-level nodes below it) TridionSiteMapNode homeNode = (TridionSiteMapNode)siteMapNode.ChildNodes[0]; StringBuilder result = new StringBuilder(); AddMenuItem(result, homeNode, null); AddChildMenuItems(result, homeNode, 0); TagBuilder navUl = new TagBuilder("ul"); navUl.Attributes.Add("class", "top-navigation"); navUl.InnerHtml = result.ToString(); // Return unordered list return(new HtmlString(navUl.ToString())); }
private static void AddChildMenuItems(StringBuilder sb, TridionSiteMapNode node, int deep) { // Iterate through childnodes if (!node.HasChildNodes) { return; } foreach (TridionSiteMapNode childNode in node.ChildNodes) { StringBuilder liNodes = new StringBuilder(); if (deep > 0 && childNode.HasChildNodes) { TagBuilder ul = new TagBuilder("ul"); AddChildMenuItems(liNodes, childNode, deep - 1); ul.InnerHtml = liNodes.ToString(); AddMenuItem(sb, childNode, ul.ToString()); } else { AddMenuItem(sb, childNode, null); } } }
private static void AddMenuItem(StringBuilder sb, TridionSiteMapNode node, string submenu) { AddMenuItem(sb, node, submenu, null); }