1-888-365-2779
+1-888-365-2779
Try Now
More in this section

Forums / General Discussions / how to custome widget MainMenu level 3

how to custome widget MainMenu level 3

1 posts, 0 answered
  1. METNEWS
    METNEWS avatar
    0 posts
    Registered:
    01 Feb 2017
    31 Jul
    Link to this post

    Hai...

    I have problems with level 3 mainmenu

    Following mainmenu.ascx script :

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using Telerik.Sitefinity.Web;

    internal class NodeInfo
    {
        public string Url { get; set; }
        public string Title { get; set; }
        public bool IsCurrent { get; set; }

        public List<NodeInfo> ChildNodes { get; set; }

        public NodeInfo()
        {
            ChildNodes = new List<NodeInfo>();
        }
    }

    public partial class UserControls_MainMenu : System.Web.UI.UserControl
    {
        private List<NodeInfo> _nodes = new List<NodeInfo>();
        protected  void Page_PreRender()
        {
            _nodes.Clear();
            if(SiteMap.RootNode.HasChildNodes)
            {
                foreach(SiteMapNode node in SiteMap.RootNode.ChildNodes)
                {
                    NodeInfo nodeInfo = ProcessNode(node);
                    if (nodeInfo != null)
                    {
                        if (node.HasChildNodes)
                        {
                            foreach (SiteMapNode childNode in node.ChildNodes)
                            {
                                NodeInfo childNodeInfo = ProcessNode(childNode);

                                if (childNodeInfo != null)
                                {
                                    nodeInfo.ChildNodes.Add(childNodeInfo);

    if (childNode.HasChildNodes)
    {
    foreach (SiteMapNode childNode2 in childNode.ChildNodes)
    {
    NodeInfo childNodeInfo2 = ProcessNode(childNode2);

    if (childNodeInfo2 != null)
    {
    childNodeInfo.ChildNodes.Add(childNodeInfo2);
    }
    }
    }
                                }
                            }
                        }


                        _nodes.Add(nodeInfo);
                    }

                    if (node.Title == "news" && Request.RawUrl.Contains("article"))
                    {
                        _nodes.Last().IsCurrent = true;
                    }
                }
            }
        }

        private NodeInfo ProcessNode(SiteMapNode node)
        {
            if ((node is PageSiteNode) && (node as PageSiteNode).ShowInNavigation)
            {
                bool nodeCurrent = false;
                if (SiteMap.CurrentNode != null)
                {
                    if (node.Title == SiteMap.CurrentNode.Title) nodeCurrent = true;
                    else if (node.HasChildNodes)
                    {
                        foreach (SiteMapNode childNode in node.ChildNodes)
                        {
                            if (childNode.Title == SiteMap.CurrentNode.Title) nodeCurrent = true;
                            else if (childNode.HasChildNodes)
                            {
                                foreach (SiteMapNode childNode2 in childNode.ChildNodes)
                                {
                                    if (childNode2.Title == SiteMap.CurrentNode.Title)
                                        nodeCurrent = true;
                                }
                            }
                        }
                    }
                }

                NodeInfo result = new NodeInfo()
                {
                    Title = node.Title,
                    Url = ResolveClientUrl(node.Url),
                    IsCurrent = nodeCurrent
                };

                return result;

            }

            return null;
        }

        protected override void  Render(HtmlTextWriter writer)
        {
    writer.Write("<div class=\"menu-button\">MENU</div>");
            writer.Write("<ul data-breakpoint=\"959\" class=\"flexnav\">");
            string aFormat = "<li class=\"{1}\"><a href=\"{0}\"><span>{2}</span></a>";
            string childFormat = "<li><a href=\"{0}\"><span>{1}</span></a>";

            for(int i=0;i<_nodes.Count;i++)
            {
    if (i==0)
    {
    if (_nodes[i].IsCurrent)
    writer.Write(string.Format(aFormat, _nodes[i].Url, "current_page_item first", _nodes[i].Title));
    else
    writer.Write(string.Format(aFormat, _nodes[i].Url, "first", _nodes[i].Title));
    }
    else {
    if (_nodes[i].IsCurrent)
    writer.Write(string.Format(aFormat, _nodes[i].Url, "current_page_item", _nodes[i].Title));
    else
    writer.Write(string.Format(aFormat, _nodes[i].Url, string.Empty, _nodes[i].Title));
    }


                if(_nodes[i].ChildNodes.Count > 0)
                {
                    writer.Write("<ul>");

    for(int j=0;j<_nodes[i].ChildNodes.Count;j++)
    {
    writer.Write(string.Format(childFormat, _nodes[i].ChildNodes[j].Url, _nodes[i].ChildNodes[j].Title));

    if(_nodes[i].ChildNodes[j].ChildNodes.Count > 0)
    {
    writer.Write("<ul>");
    foreach (NodeInfo childNode in _nodes[i].ChildNodes[j].ChildNodes)
    {
    writer.Write(string.Format(childFormat, childNode.Url, childNode.Title));
    writer.Write("</li>");
    }
    writer.Write("</ul>");
    }

    writer.Write("</li>");
    }

                    writer.Write("</ul>");
                }


                writer.Write("</li>");
                
            }

            writer.Write("</ul>");
    writer.Write("<div class=\"clr\"></div>");
        }

        protected void Page_Load(object sender, EventArgs e)
        {

        }
    }

    How to level 3 menu can display?

    Thanks,

    Mamat

     

     

1 posts, 0 answered