Add SF menu item using code.

Posted by Community Admin on 04-Aug-2018 11:54

Add SF menu item using code.

All Replies

Posted by Community Admin on 17-Nov-2011 00:00

I created dynamic main navigation[Menu] from sitefinity pages. See the code below. It works fine. Now I want to have one menu item "Blog" which should redirect to our blog site.

I know I can create a page in sitefinity and redirect that page to the blog site, but I dont want to create sitefinity page as we are restricted with the number of pages 50 [We use Small Business SF].

There must be some way to add menu option using code. Please help.


Html code:
---------------------------------------------------------
<div id="menu">
    <asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound"
        OnPreRender="Repeater1_PreRender">
        <HeaderTemplate>
            <ul class="topnav">
        </HeaderTemplate>
        <ItemTemplate>
            <li id="LiItem" runat="server">
                <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# Eval("Url") %>' Text='<%# Eval("Title") %>'></asp:HyperLink>
                <asp:Repeater ID="RepeaterInner" runat="server">
                    <HeaderTemplate>
                        <ul class="subnav">
                    </HeaderTemplate>
                    <ItemTemplate>
                        <li id="LiItem" runat="server">
                            <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# Eval("Url") %>' Text='<%# Eval("Title") %>'></asp:HyperLink>
                        </li>
                    </ItemTemplate>
                    <FooterTemplate>
                        </ul>
                    </FooterTemplate>
                </asp:Repeater>
            </li>
        </ItemTemplate>
        <SeparatorTemplate>
            <li class="seperator"></li>
        </SeparatorTemplate>
        <FooterTemplate>
            </ul>
        </FooterTemplate>
    </asp:Repeater>
</div>


Code behind :
-------------------------------------------------------------------------------
 public partial class Menu : System.Web.UI.UserControl
   
        protected void Page_Load(object sender, EventArgs e)
       
            IList<PageSiteNode> list = new List<PageSiteNode>();


            foreach (PageSiteNode node in SiteMap.RootNode.GetAllNodes())
           
                if (node.ParentNode == SiteMap.RootNode && node.ShowInNavigation)
               
                    list.Add(node);
               
           


            Repeater1.DataSource = list;
            Repeater1.DataBind();
       


        protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
       
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
           
                HyperLink hl = (HyperLink)e.Item.FindControl("HyperLink1");
                if (SiteMap.CurrentNode != null)
               
                    HtmlGenericControl item = (HtmlGenericControl)e.Item.FindControl("LiItem");
                    if (SiteMap.CurrentNode.Url == hl.NavigateUrl || SiteMap.CurrentNode.ParentNode.Url == hl.NavigateUrl)
                   
                        item.Attributes["class"] = "active";
                   
               


                SiteMapNode node = (SiteMapNode)e.Item.DataItem;
                if (node.HasChildNodes)
               
                    Repeater repeaterInner = (Repeater)e.Item.FindControl("RepeaterInner");


                    IList<PageSiteNode> list = new List<PageSiteNode>();


                    foreach (PageSiteNode nodeInner in node.ChildNodes)
                   
                        if (nodeInner.ShowInNavigation)
                       
                            list.Add(nodeInner);
                       
                   
                    repeaterInner.DataSource = list;
                    repeaterInner.DataBind();
               
           
       


        protected void Repeater1_PreRender(object sender, EventArgs e)
       
            if (Repeater1.Items.Count > 0)
           
                RepeaterItem rpItem = Repeater1.Items[Repeater1.Items.Count - 1];
                HtmlGenericControl item = (HtmlGenericControl)rpItem.FindControl("LiItem");
                item.Attributes["class"] = "lastli";


           


       
   

Posted by Community Admin on 22-Nov-2011 00:00

Hi Vaibhavi,

Use the ASP.NET approach to add items dynamically to databound controls.
Here is a sample.

Greetings,
Stanislav Velikov
the Telerik team

Do you want to have your say in the Sitefinity development roadmap? Do you want to know when a feature you requested is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items

This thread is closed