Ejemplo n.º 1
0
        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());
                        }
                    }
                }
            }
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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());
        }
Ejemplo n.º 4
0
        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());
        }
Ejemplo n.º 7
0
        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);
                }
            }
        }
Ejemplo n.º 10
0
 private static void AddMenuItem(StringBuilder sb, TridionSiteMapNode node, string submenu)
 {
     AddMenuItem(sb, node, submenu, null);
 }