Wednesday, July 27, 2011

SharePoint 2010 Custom Top navigation menu


<script type="text/javascript">

    $(document).ready(function () {
        SetHover();
    });

    function SetHover() {

        var Title = window.location.toString().split("/");
        Title = decodeURIComponent(Title[4].replace('%20', ''));
        for (i = 0; i <= Title.length; i++) {
            Title = Title.replace(' ', '');
            Title = Title.replace('%20', '');
        }
        document.getElementById('Pages').removeAttribute("class");
        document.getElementById(Title.replace('%20', '')).setAttribute("class", 'currenttab');
    }


    // initialise plugins
    jQuery(function () {
        jQuery('ul.sf-menu').superfish();
    });


</script>
<script runat="server">
    public StringBuilder MenuItems = new StringBuilder();
    int ID = 0;
    protected DataTable objdataTable = new DataTable();
    private enum nodeSpecsEnum
    {
        Site = 1,
        Page = 0
    }
    private nodeSpecsEnum nodeSpecs;

    protected void GetMenu(DataTable MenuTable, string level, string Parent, string ParentLevel, string ID, string Title)
    {

        try
        {

            if (ParentLevel == (string)(int.Parse(level) - 1).ToString())
            {
                foreach (DataRow Drlevel2 in MenuTable.Rows)
                {
                    if (Drlevel2["Level"].ToString() == level)
                    {
                        if (Drlevel2["Parent"].ToString() == Parent)
                        {
                            if (Drlevel2["IsPage"].ToString() == "True")
                            {

                                MenuItems.AppendLine("<li id='" + Drlevel2["ID"].ToString() + "'><a  href='#'>" + Drlevel2["Title"].ToString() + "</a>");
                                MenuItems.AppendLine("<ul>");
                                GetMenu(MenuTable, (string)(int.Parse(level) + 1).ToString(), Drlevel2["Title"].ToString(), level, ID, Drlevel2["Title"].ToString());
                                MenuItems.AppendLine("</ul>");
                                MenuItems.AppendLine("</li>");
                            }
                            else if (Drlevel2["IsPage"].ToString() == "False")
                            {

                                //DataView dv = MenuTable.DefaultView;
                                //dv.RowFilter = "Key = '" + Drlevel2["ParentURL"].ToString().ToLower() + "'";
                                //DataTable dt = dv.ToTable();
                                //string Key = dt.Rows[0]["ParentURL"].ToString();
                                //foreach (DataRow Drlevel1 in MenuTable.Rows)
                                //{
                                //if (Title == Drlevel2["Key"].ToString().ToLower())
                                //{
                                MenuItems.AppendLine("<li ParentID='" + ID + "'><a href='" + Drlevel2["URL"].ToString() + "' >" + Drlevel2["Title"].ToString() + "</a>");
                                MenuItems.AppendLine("</li>");
                                //}
                                //}
                            }
                        }
                    }

                }
            }
        }
        catch
        {
            Response.Redirect((String)this.GetGlobalResourceObject("MIT", "ErrorPage"));
        }


    }
    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {

            objdataTable.Columns.Add("Title", typeof(string));
            objdataTable.Columns.Add("URL", typeof(string));
            objdataTable.Columns.Add("IsPage", typeof(string));
            objdataTable.Columns.Add("Key", typeof(string));
            objdataTable.Columns.Add("Level", typeof(int));
            objdataTable.Columns.Add("IsVisible", typeof(bool));
            objdataTable.Columns.Add("Parent", typeof(string));
            objdataTable.Columns.Add("ID", typeof(int));
            objdataTable.Columns.Add("ParentURL", typeof(string));



            SPSiteMapProvider sitemapProvider = (SPSiteMapProvider)SiteMap.Providers["PortalSiteMapProvider"];




            siteMap.Provider = sitemapProvider;

            siteMap.ShowStartingNode = false;



            tree.NodeIndent = 10;
            tree.DataSource = siteMap;

            tree.DataBind();
            tree.Visible = false;
            DataView objDataView = objdataTable.DefaultView;
            objDataView.RowFilter = "URL like '%/pages/%' AND URL like '%" + (String)this.GetGlobalResourceObject("MIT", "URL") + "%' ";
            objDataView.Sort = "ID DESC";
            //if (BEAT.GeneralMethods.GetCulture().ToLower() == "en")
            //   objDataView.RowFilter = "URL like '%/english/%' and URL like '%/pages/%'";
            //else
            //  objDataView.RowFilter = "URL like '%/arabic/%' and URL like '%/pages/%'";
            MenuItems.AppendLine("<ul class='sf-menu'>");



            foreach (DataRow Drlevel1 in objDataView.ToTable().Rows)
            {
                if (Drlevel1["Level"].ToString() == "1")
                {

                    if (Drlevel1["IsPage"].ToString() == "True")
                    {
                        MenuItems.AppendLine("<li id='" + Drlevel1["Title"].ToString().Replace(" ", "") + "'><a href='#'  >" + Drlevel1["Title"].ToString() + "</a>");
                        MenuItems.AppendLine("<ul>");
                        GetMenu(objDataView.ToTable(), "2", Drlevel1["Title"].ToString(), "1", Drlevel1["Title"].ToString(), Drlevel1["Title"].ToString());
                        MenuItems.AppendLine("</ul>");
                        MenuItems.AppendLine("</li>");
                    }
                    else
                    {
                        MenuItems.AppendLine("<li><a href='" + Drlevel1["URL"].ToString() + "'>" + Drlevel1["Title"].ToString() + "</a>");
                        MenuItems.AppendLine("<ul>");
                        GetMenu(objDataView.ToTable(), "2", Drlevel1["Title"].ToString(), "1", Drlevel1["Title"].ToString(), Drlevel1["Title"].ToString());
                        MenuItems.AppendLine("</ul>");
                        MenuItems.AppendLine("</li>");
                    }
                }
            }
            MenuItems.AppendLine("<li class='currenttab' id='Pages' ><a href='" + (String)this.GetGlobalResourceObject("MIT", "Language") + "'>" + (String)this.GetGlobalResourceObject("MIT", "HomePage") + "</a></li>");
            MenuItems.AppendLine("</ul>");

            Menu.InnerHtml = MenuItems.ToString();
            //GridView1.DataSource = objDataView;
            //GridView1.DataBind();


            tree.Visible = false;
        }
        catch
        {
            Response.Redirect((String)this.GetGlobalResourceObject("MIT", "ErrorPage"));
        }
    }
    protected void TV_TreeNodeDataBound(object sender, TreeNodeEventArgs e)
    {
        try
        {
            string[] stringSeparators = new string[] { "pages" };
            SiteMapNode node = (SiteMapNode)e.Node.DataItem;
            string _CurrentUrl = "http://sp2010v2/EN/";
            if (_CurrentUrl.StartsWith(node.Url))
                e.Node.Expand();
            else
                e.Node.Collapse();

            if (_CurrentUrl == node.Url)
                e.Node.Select();
            ID = ID + 1;
            DataRow dr = objdataTable.NewRow();
            dr["ID"] = ID;
            dr["Title"] = node.Title;
            dr["Key"] = node.Key.ToLower().Split(stringSeparators,
                  StringSplitOptions.RemoveEmptyEntries)[0];
            dr["URL"] = node.Url;
            dr["IsPage"] = node.HasChildNodes.ToString();
            dr["Level"] = e.Node.Depth;
            dr["Parent"] = node.ParentNode;
            dr["ParentURL"] = node.ParentNode.Url.ToLower().Split(stringSeparators,
                  StringSplitOptions.RemoveEmptyEntries)[0];


            objdataTable.Rows.Add(dr);
            objdataTable.AcceptChanges();
        }
        catch
        {
            Response.Redirect((String)this.GetGlobalResourceObject("MIT", "ErrorPage"));
        }
    }

    private string IsPage(string Key, string URL)
    {
        try
        {
            if (Key.ToLower() == URL.ToLower())
                return true.ToString();
            else
                return false.ToString();
        }
        catch
        {
            Response.Redirect((String)this.GetGlobalResourceObject("MIT", "ErrorPage"));
            return false.ToString();
        }
    }
    private int Level(string key)
    {
        try
        {

            string keystr = key;
            if (key.ToLower().Contains("/pages/"))
            {

                int indexofString = keystr.ToLower().IndexOf("/pages/");
                int KeyLength = keystr.Length;
                string TrimmingString = keystr.Substring(indexofString, (KeyLength - indexofString));
                keystr = keystr.Replace(TrimmingString, "");
            }
            else if (key.ToLower().Contains("/_layouts/"))
            {

                int indexofString = keystr.ToLower().IndexOf("/_layouts/");
                int KeyLength = keystr.Length;
                string TrimmingString = keystr.Substring(indexofString, (KeyLength - indexofString));
                keystr = keystr.Replace(TrimmingString, "");
            }

            return keystr.Split(Convert.ToChar("/")).Length - 1;
        }
        catch
        {
            Response.Redirect((String)this.GetGlobalResourceObject("MIT", "ErrorPage"));
            return 0;
        }
    }
</script>
<div>
    <asp:SiteMapDataSource ID="siteMap" runat="server" EnableViewState="false" ShowStartingNode="False"
        StartingNodeUrl="sid:1002" />
    <asp:TreeView ID="tree" runat="server" EnableViewState="false" OnTreeNodeDataBound="TV_TreeNodeDataBound">
    </asp:TreeView>
</div>
<div id="Menu" runat="server">
</div>

No comments:

Post a Comment