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

Forums / Developing with Sitefinity / Display default designer with embedded controls

Display default designer with embedded controls

2 posts, 1 answered
  1. Michael
    Michael avatar
    4 posts
    Registered:
    15 Feb 2012
    22 Feb 2012
    Link to this post

    I have created a wrapper around the NavigationControl so that we can have a title.  Is there any way that we can use the default designer for the NavigationControl, or any default control, whenever they are embedded into a custom user control?

    I currently do not have the NavControl exposed in the code behind in the attached code.  I am just exposing the properties that we need to edit and assigning the values on the Page_Load event.   If we cannot use the default designer is there a better way to do this?


    <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="SiteMenuWithHeader.ascx.cs" Inherits="AkesocareWeb.UserControls.SiteMenuWithHeader" %>
    <%@ Register TagPrefix="tk" Assembly="Telerik.Sitefinity" Namespace="Telerik.Sitefinity.Web.UI.NavigationControls" %>
    <div class="linkBox">
        <h4><asp:Label runat="server" ID="txtNavHeading"></asp:Label></h4>
        <!-- Default control settings are in the code behind. -->
        <tk:NavigationControl ID="NavControl" runat="server"
            NavigationMode="VerticalSimple"
            SelectionMode="CurrentPageSiblings"></tk:NavigationControl>
    </div>

    001.using System;
    002.using System.Collections.Generic;
    003.using System.Linq;
    004.using System.Web;
    005.using System.Web.UI.WebControls;
    006.using System.ComponentModel;
    007.using Telerik.Sitefinity;
    008.using Telerik.Sitefinity.Web;
    009.using Telerik.Sitefinity.Web.UI;
    010.using Telerik.Sitefinity.Web.UI.NavigationControls;
    011. 
    012.namespace AkesocareWeb.UserControls
    013.{
    014.    public partial class SiteMenuWithHeader : System.Web.UI.UserControl
    015.    {
    016. 
    017.        #region Fields
    018. 
    019.        private PageSiteNode currentNode;
    020.        private PageSiteNode parentNode;
    021. 
    022.        private int? defaultMaxBindDepth = 1;
    023.        private bool? defaultShowParentPage = false;
    024.        private string defaultCssClass = "RadMenu_navigationsection";
    025.        private string defaultSkin = "navigationsection";
    026. 
    027.        #endregion
    028. 
    029.        #region Properties
    030. 
    031.        private PageSiteNode ParentNode
    032.        {
    033.            get
    034.            {
    035.                if (this.parentNode == null) GetParentNode();
    036.                return this.parentNode;
    037.            }
    038.        }
    039. 
    040.        private PageSiteNode CurrentNode
    041.        {
    042.            get
    043.            {
    044.                if (this.currentNode == null) GetCurrentNode();
    045.                return this.currentNode;
    046.            }
    047.        }
    048. 
    049.        public int? SiteMenu_MaxBindDepth
    050.        {
    051.            get { return this.defaultMaxBindDepth; }
    052.            set
    053.            {
    054.                if (value != null)
    055.                    this.defaultMaxBindDepth = value;
    056.            }
    057.        }
    058. 
    059.        public bool? SiteMenu_ShowParentPage
    060.        {
    061.            get { return this.defaultShowParentPage; }
    062.            set
    063.            {
    064.                if (value != null)
    065.                    this.defaultShowParentPage = value;
    066.            }
    067.        }
    068. 
    069.        public string SiteMenu_CssClass
    070.        {
    071.            get { return this.defaultCssClass; }
    072.            set
    073.            {
    074.                if (value != null)
    075.                    this.defaultCssClass = value;
    076.            }
    077.        }
    078. 
    079.        public string SiteMenu_Skin
    080.        {
    081.            get { return this.defaultSkin; }
    082.            set
    083.            {
    084.                if (value != null)
    085.                    this.defaultSkin = value;
    086.            }
    087.        }
    088. 
    089.        public string SiteMenu_Heading { get; set; }
    090.         
    091.        #endregion
    092. 
    093.        #region Events
    094. 
    095.        protected void Page_Load(object sender, EventArgs e)
    096.        {
    097.            SetMenuHeading();
    098.            this.NavControl.CssClass = defaultCssClass;
    099.            this.NavControl.Skin = defaultSkin;
    100.            this.NavControl.ShowParentPage = (bool)defaultShowParentPage;
    101.            this.NavControl.MaxDataBindDepth = (int)defaultMaxBindDepth;
    102.        }
    103. 
    104.        #endregion
    105. 
    106.        #region Methods
    107. 
    108. 
    109.        #region Private Methods
    110. 
    111.        private void SetMenuHeading()
    112.        {
    113.            if (!string.IsNullOrEmpty(this.SiteMenu_Heading))
    114.            {
    115.                this.txtNavHeading.Text = SiteMenu_Heading;
    116.            }
    117.            else
    118.            {
    119.                if (this.ParentNode != null)
    120.                    SetGroupTitle();
    121.                else
    122.                    SetPageTitle();
    123.            }
    124.        }
    125. 
    126.        private void GetCurrentNode()
    127.        {
    128.            this.currentNode = Telerik.Sitefinity.Web.SiteMapBase.GetActualCurrentNode();
    129.        }
    130. 
    131.        private void GetParentNode()
    132.        {
    133.            var currentNode = this.CurrentNode;
    134.            PageSiteNode parentNode = null;
    135.            if (currentNode != null)
    136.                parentNode = currentNode.ParentNode as PageSiteNode;
    137.            this.parentNode = (parentNode != null && parentNode.ParentKey != null) ?
    138.                parentNode : null;
    139.        }
    140. 
    141.        private void SetPageTitle()
    142.        {
    143.            if (this.CurrentNode == null) return;
    144.            this.txtNavHeading.Text = this.CurrentNode.Title;
    145.        }
    146. 
    147.        private void SetGroupTitle()
    148.        {
    149.            if (this.ParentNode == null) return;
    150.            if (this.ParentNode.NodeType == Telerik.Sitefinity.Pages.Model.NodeType.Group)
    151.                this.txtNavHeading.Text = this.ParentNode.Title;
    152.        }
    153. 
    154.        private bool IsCurrentNode(PageSiteNode node)
    155.        {
    156.            //Current node can be null when in design mode
    157.            var currentNode = this.CurrentNode;
    158.            bool result = false;
    159.            if (currentNode != null)
    160.                result = (node.PageId == this.CurrentNode.PageId);
    161.            return result;
    162.        }
    163. 
    164. 
    165.        #endregion
    166. 
    167. 
    168.        #region Public Methods
    169. 
    170. 
    171.        #endregion
    172. 
    173. 
    174.        #endregion
    175.    }
    176.}

  2. Stanislav Velikov
    Stanislav Velikov avatar
    1113 posts
    Registered:
    17 Aug 2017
    27 Feb 2012
    Link to this post
    Hi,

     You can use the navigation widget designer. To do this craete a class and inherit from Telerik.Sitefinity.Web.UI.NavigationControls.NavigationControl .
    Register the class as a new user control. Go to Administration->Settings->Advanced->Toolboxes->Toolboxes->PageControls->Sections->NavigationSections->Tools and register the control as 
    ControlType: SitefinityWebApp.Class1 (namespace.classname of the newly created class)
    Name: Class1
    Title: CustomNavigation

    To add the lable use a modified template for the navigation control where you can add the label.
    The default template is:

    <%@ Control Language="C#" %>
    <%@ Register Assembly="Telerik.Sitefinity" Namespace="Telerik.Sitefinity.Web.UI" TagPrefix="sf" %>
    <%@ Register Assembly="Telerik.Sitefinity" Namespace="Telerik.Sitefinity.Web.UI.NavigationControls.SiteMapNavigations" TagPrefix="navcontrols" %>
    <%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %>
     
     
     
    <sf:ConditionalTemplateContainer ID="conditionalTemplate" runat="server">
        <Templates>
            <sf:ConditionalTemplate Left="NavigationMode" Operator="Equal" Right="HorizontalSimple" runat="server">
                 <navcontrols:SiteMapNavigationTabStrip ID="siteMapControl_horizontalsimple" runat="server" Skin="Sitefinity">
                 </navcontrols:SiteMapNavigationTabStrip>
            </sf:ConditionalTemplate>
            <sf:ConditionalTemplate Left="NavigationMode" Operator="Equal" Right="HorizontalDropDownMenu" runat="server">
                <navcontrols:SiteMapNavigationMenu ID="siteMapControl_horizontaldropdownmenu" runat="server"  Skin="Sitefinity" />
            </sf:ConditionalTemplate>
            <sf:ConditionalTemplate Left="NavigationMode" Operator="Equal" Right="HorizontalTabs" runat="server">
               <navcontrols:SiteMapNavigationTabStrip ID="siteMapControl_horizontaltabs" runat="server" Skin="Sitefinity">
                 </navcontrols:SiteMapNavigationTabStrip>
            </sf:ConditionalTemplate>
            <sf:ConditionalTemplate Left="NavigationMode" Operator="Equal" Right="VerticalSimple" runat="server">
                <navcontrols:SiteMapNavigationTabStrip ID="siteMapControl_verticalsimple" runat="server" Orientation="VerticalLeft" MaxDataBindDepth="1" Skin="Sitefinity">
                 </navcontrols:SiteMapNavigationTabStrip>
            </sf:ConditionalTemplate>
            <sf:ConditionalTemplate Left="NavigationMode" Operator="Equal" Right="SiteMapInColumns" runat="server">
                <navcontrols:SitemapNavigationSiteMapControl ID="siteMapControl_sitemapincolumns" runat="server" MaxDataBindDepth="2" Skin="Sitefinity">
                <LevelSettings>
                    <telerik:SiteMapLevelSetting  Level="0">
                        <ListLayout RepeatDirection="Vertical" RepeatColumns="10" />
                    </telerik:SiteMapLevelSetting>
                </LevelSettings>
                </navcontrols:SitemapNavigationSiteMapControl>
            </sf:ConditionalTemplate>
            <sf:ConditionalTemplate Left="NavigationMode" Operator="Equal" Right="SiteMapInRows" runat="server">
                <navcontrols:SitemapNavigationSiteMapControl ID="siteMapControl_sitemapinrows" runat="server" MaxDataBindDepth="2" Skin="Sitefinity">
                 <LevelSettings>
                    <telerik:SiteMapLevelSetting>
                        <ListLayout RepeatColumns="1" AlignRows="true" />
                    </telerik:SiteMapLevelSetting>
                    <telerik:SiteMapLevelSetting Layout="Flow" SeparatorText="┊" />
                </LevelSettings>
                </navcontrols:SitemapNavigationSiteMapControl>
            </sf:ConditionalTemplate>
            <sf:ConditionalTemplate Left="NavigationMode" Operator="Equal" Right="CustomNavigation" runat="server">
                <telerik:RadSiteMap ID="siteMapControl_customnavigation" runat="server" Skin="Sitefinity" />
            </sf:ConditionalTemplate>
            <sf:ConditionalTemplate Left="NavigationMode" Operator="Equal" Right="VerticalTree" runat="server">
                <navcontrols:SiteMapNavigationTreeView runat="server" id="siteMapControl_verticaltree" Skin="Sitefinity">
                </navcontrols:SiteMapNavigationTreeView>
            </sf:ConditionalTemplate>
        </Templates>
    </sf:ConditionalTemplateContainer>
    <script type="text/javascript">
         
     
        function radMenuOnClick(sender, args) {
     
            var state = args.get_item().get_attributes().getAttribute("ExpandOnClick");
            args.get_item().get_attributes().setAttribute("ExpandOnClick", "true")
            args.get_item().open();
        }
     
        function radMenuOnOpening(sender, args) {
            var state = args.get_item().get_attributes().getAttribute("ExpandOnClick");
            if(state != "true")
                args.set_cancel(true);
            args.get_item().get_attributes().setAttribute("ExpandOnClick", "false")
        }
    </script>

    In the class register the new template to be used:
    public override string LayoutTemplatePath
            {
                get
                {
                    string modeTemplate = null;
                    if (string.IsNullOrWhiteSpace(modeTemplate) && string.IsNullOrWhiteSpace(this.LayoutTemplateName))
                    {
                        modeTemplate = NavigationControl.defaultEmbeddedLayoutTemplatePath;
                    }
     
                    return modeTemplate;
                }
                set
                {
                    return;
                }
            }
     
     
    public static readonly string defaultEmbeddedLayoutTemplatePath = ("SitefinityWebApp.CustomizedTemplate.ascx");
    This will require reworking the already available code to work with Sitefinity navigation control.

    Kind regards,
    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
    Answered
2 posts, 1 answered