Custom Navigation Questions
I have a custom navigation template like the following.
<%@ Control Language="C#" AutoEventWireup="true" %>
<
telerik:RadTabStrip
ID
=
"RadPanelbarNav"
runat
=
"server"
Visible
=
"false"
/>
<
asp:Repeater
ID
=
"Repeater1"
runat
=
"server"
DataSourceID
=
"SiteMapDataSource"
>
<
HeaderTemplate
>
<
ul
class
=
"nav-holder"
>
</
HeaderTemplate
>
<
ItemTemplate
>
<
li
>
<
a
href='<%# Eval("Url") %>' runat='server'>
<
h3
><%#Eval ("Title") %></
h3
>
<
p
><%# Eval("Description") %></
p
>
</
a
>
</
li
>
</
ItemTemplate
>
<
FooterTemplate
>
</
ul
>
</
FooterTemplate
>
</
asp:Repeater
>
<
asp:SiteMapDataSource
runat
=
"server"
ID
=
"SiteMapDataSource"
StartingNodeOffset
=
"0"
ShowStartingNode
=
"false"
/>
Hello Jonathan,
By default SitemapDataSource will return all nodes and then you can filter the ones who are marked not to be shown in Navigation from the code-behind. For more information on how to achieve this you can refer to the sample code I've attached.
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Web;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
Telerik.Sitefinity;
using
Telerik.Sitefinity.Web;
namespace
SitefinityWebApp.Controls
public
partial
class
WebUserControl1 : System.Web.UI.UserControl
protected
void
Page_Load(
object
sender, EventArgs e)
Repeater1.ItemDataBound +=
new
RepeaterItemEventHandler(Repeater1_ItemDataBound);
Repeater1.DataBind();
void
Repeater1_ItemDataBound(
object
sender, RepeaterItemEventArgs e)
if
(e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
var data = e.Item.DataItem
as
PageSiteNode;
if
(data !=
null
)
if
(data.ShowInNavigation ==
false
)
e.Item.Visible =
false
;
Hey Boyan,
How would you implement this with a RadPanelBar? I'm noticing that if you hide items on ItemDataBound you get undesirable results
Lets say you have a structure like this
- Parent
- Child
If the Child gets visible set to false like the code you defined because of show-in-navigation being false...then the PanelBar Parent still has the Expand\Collapse arrows like it has Children.
(see attached)
Hello Steve,
Yes, you are right on that one. In this case I'd recommend you to get alist of pages using the Fluent/native API and then pass this list as a DataSource to PanelBar. In the filter expression you can get only these pages that have ShoInNavigation == true. For more information o how to bind the RadPanelBar to this list of pages, please take a look at this article from our documentation.
Greetings,
Boyan Barnev
the Telerik team
Thanks Boyan,
What am I missing here?
protected
void
Page_Load(
object
sender, EventArgs e)
var pages = App.WorkWith()
.Pages()
.ThatArePublished()
.LocatedIn(Telerik.Sitefinity.Fluent.Pages.PageLocation.Frontend)
.Where(p => p.ShowInNavigation ==
true
)
.OrderBy(p => p.Ordinal)
.Get();
navPanelBar.DataSource = pages;
navPanelBar.DataBind();
<
telerik:RadPanelBar
ID
=
"navPanelBar"
runat
=
"server"
Skin
=
"OCFP"
EnableEmbeddedSkins
=
"false"
DataFieldParentID
=
"ParentId"
DataFieldID
=
"Id"
DataTextField
=
"Title"
OnItemDataBound
=
"OnPageNode_ItemDataBound"
AllowCollapseAllItems
=
"false"
MaxDataBindDepth
=
"5"
Width
=
"256px"
>
<
ExpandAnimation
Type
=
"None"
/>
<
CollapseAnimation
Type
=
"None"
/>
</
telerik:RadPanelBar
>
Hi Steve,
Actually the problem seems to be in the DataSource that you're binding the PanelBar to. When you declare DataFieldParentID="ParentId" in the PanelBar template it's expecting to receive all PageNodes with ParentId property different from null. However, if you filter only pages .LocatedIn(Telerik.Sitefinity.Fluent.Pages.PageLocation.Frontend) this would construct the list without the "Pages" root node (it's the same as specifying .GetPageNodes().Where(pN => pN.RootNode.Id == SiteInitializer.FrontendRootNodeId). What you can do if filter out the Backend PageNodes and the Backend RootNode in the lambda expression. Please refer to the below sample:
public
partial
class
PanelBarCustom : System.Web.UI.UserControl
protected
void
Page_Load(
object
sender, EventArgs e)
var source = App.WorkWith().Pages()
//.LocatedIn(Telerik.Sitefinity.Fluent.Pages.PageLocation.Frontend)
.ThatArePublished()
.Where(p => p.ShowInNavigation ==
true
&& p.IsBackend ==
false
&& p.Id != SiteInitializer.BackendRootNodeId)
.Get()
.ToList();
PanelBarControl.DataSource = source;
PanelBarControl.DataTextField =
"Title"
;
PanelBarControl.DataFieldID =
"Id"
;
PanelBarControl.DataFieldParentID =
"ParentId"
;
PanelBarControl.DataBind();
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="PanelBarCustom.ascx.cs" Inherits="SitefinityWebApp.Controls.PanelBarCustom" %>
<
telerik:RadPanelBar
runat
=
"server"
ID
=
"PanelBarControl"
></
telerik:RadPanelBar
>
Ahhh I figured it much be something like that :) My next step was to just get "Pages" as the starting node.
I am curious though...is this a Fluent Bug?...or current limitation
I mean...
.LocatedIn(Telerik.Sitefinity.Fluent.Pages.PageLocation.Frontend)
== p.IsBackend == false
Right?...are they not the same thing?
Here's what I'm saying....when I tell it I just want the frontend pages with .LocatedIn()...I would ASSUME that SiteInitalizer.BackendRootNodeID wouldn't be taken into effect since I just told it I want only front-end pages.
Perhaps another method to wrap this "p.Id != SiteInitializer.BackendRootNodeId
" ? Or an override on LocatedIn?
Hello Steve,
Yes, you are right - .LocatedIn(Telerik.Sitefinity.Fluent.Pages.PageLocation.Frontend)
is not the same as p.IsBackend == false
as it will still leave out the "Backend" root node in the PageNodes list, that's why I'm excluding it additionally with p.Id != SiteInitializer.BackendRootNodeId
. However this is not an API limitation for sure, maybe I didn't express myself properly in the previous post - the problem is coming from the fact that when you declare a DataFieldParentID property (which you definitely need, otherwise you'll get a flat structure of the current pages) you need to have the FrontendRootNodeId present in the list since it's the ParentId of all Frontend pages, that's why applying the .LocatedIn filter returns an empty PanelBar - it cannot bind itself to a list of pages that are missing the ParentId.
Kind regards,
Boyan Barnev
the Telerik team
I attempted the same DataBound method that Boyan suggested in an earlier post. I had problems filtering out unpublished pages, and found this newer post (http://www.sitefinity.com/devnet/forums/sitefinity-4-x/general-discussions/unpublished-page-showing-up-in-custom-navigation-after-4-2-upgrade.aspx) that recommends using the SitefinitySiteMapDataSource control. This solved all my problems with trying to create a custom navigation control.
<%@ Register Assembly="Telerik.Sitefinity" Namespace="Telerik.Sitefinity.Web.UI.NavigationControls" TagPrefix="navcontrols" %>
<
telerik:RadPanelBar
runat
=
"server"
ID
=
"SitemapPanelbar"
DataSourceID
=
"SiteMapDataSource"
Width
=
"180px"
Skin
=
"Simple"
></
telerik:RadPanelBar
>
<
navcontrols:SitefinitySiteMapDataSource
ID
=
"SiteMapDataSource"
runat
=
"server"
StartingNodeOffset
=
"1"
ShowStartingNode
=
"false"
/>
I am trying to figure out how to use the "user" configuration / selected pages from the Navigation editor. But unfortunately knows how to do this. Is the source code available so I can research how the built in navigation stuff works?
I want to use the Navigation control settings with a custom navigator layout / css. I got what I wanted with doing a lot of messing around with css, but assume I did it the hard way.
I am using the Simplicity free skin. The custom navigation is only for the top level pages. This is fine for the front page, but I want a similarly looking navigation else where.
Secondly, is there a way to register these custom navigation as controls, or selections from the available menu options so I don't have to have non tech users figure out a long path name to stick in just the right places.
I am new with Sitefinity and looking to learn as much as I can.
Thanks.
Hi Tom Miller,
Thank you for the clarification. Using an external template for the navigation is the easiest way to achieve this in terms of development efforts, as you're using the built-in designer of the navigation control, and are simply specifying how to represent the selected data on the frontend. However, it's possible to create a completely separate user controls with their custom logic and register them as widgets in the toolbox like the others. For more information you can check this article from our online documentation.
Best wishes,
Boyan Barnev
the Telerik team
HI,
Thanks for the info. The thing I am still missing is how to create a template for a navigation control. I found this article, but there no built in template for navigation.
www.sitefinity.com/.../mapping_external_templates_for_sitefinity_4_widgets.aspx
Any chance you could provide a simple example one for me?
Thanks.
I tried this and it didn't work. I don't have to worry about sub-level menus.
Hello Tom Miller,
Can you please elaborate on "I tried this and it didn't work. I don't have to worry about sub-level menus." Do you mean that you have followed the steps described int he sample video I provided several replies ago, and if so, can you please let me know of the issues you have experienced?
Greetings,
Boyan Barnev
the Telerik team
Sorry I wasn't more specific
#1 - I used some example code from the internet and yours in this thread about hiding a menu item that is no marked "ShowInNavigation". So that is the part that "isn't working"
#2 - Still looking for a good example of an external template for Navigation. I found a blog post that the best way to start is to grab it from an existing widget. There aren't any existing widgets for Navigation, so I am not sure where to start. If by an external template, you mean an ascx file, I have that, but it is clearly not using the Navigation Widget settings. Actually it is the example above. It is what the "Simplicity" skin uses (except it doesn't check for "ShowInNavigation").
Thanks.
Hi Tom Miller,
Thank you for the clarification. By inspecting the Simplicity skin navigation control template, it looks like it should take into account the navigation control settings for its top level navigation (the one consisting of RadTabStrip, strange though why its Visibility is set to false), however its lower part the Repeater has its own datasource. This datasource is formed by SiteMapDatasource control, which indeed does not take into account the ShowInNavigation property of Sitefinity pages. However, you can easily convert it to using our SitefinitySiteMapDataSource control like this:
<%@ Control Language="C#" AutoEventWireup="true" %>
<%@ Register Assembly="Telerik.Sitefinity" Namespace="Telerik.Sitefinity.Web.UI.NavigationControls" TagPrefix="sfMap" %>
<
sfMap:SitefinitySiteMapDataSource
runat
=
"server"
ID
=
"SitefinitySiteMapDS"
ShowStartingNode
=
"false"
/>
<
telerik:RadTabStrip
ID
=
"RadPanelbarNav"
runat
=
"server"
Visible
=
"false"
/>
<
asp:Repeater
ID
=
"Repeater1"
runat
=
"server"
DataSourceID
=
"SitefinitySiteMapDS"
>
<
HeaderTemplate
>
<
ul
class
=
"nav-holder"
>
</
HeaderTemplate
>
<
ItemTemplate
>
<
li
>
<
a
href='<%# Eval("Url") %>' runat='server'>
<
h3
><%#Eval ("Title") %></
h3
>
<
p
><%# Eval("Description") %></
p
>
</
a
>
</
li
>
</
ItemTemplate
>
<
FooterTemplate
>
</
ul
>
</
FooterTemplate
>
</
asp:Repeater
>
<%@ Control Language="C#" AutoEventWireup="true" %>
<
telerik:RadTabStrip
ID
=
"RadTabStrip1"
runat
=
"server"
/>
<%@ Control Language="C#" AutoEventWireup="true" %>
<%@ Register Assembly="Telerik.Sitefinity" Namespace="Telerik.Sitefinity.Web.UI.NavigationControls" TagPrefix="sfMap" %>
<
sfMap:SitefinitySiteMapDataSource
runat
=
"server"
ID
=
"SitefinitySiteMapDS"
ShowStartingNode
=
"false"
/>
<
telerik:RadTabStrip
ID
=
"RadPanelbarNav"
runat
=
"server"
DataSourceID
=
"SitefinitySiteMapDS"
/>
Thanks so much. Having a problem with one item
<
p
><%# Eval("Description") %></
p
>
Here is a detailed stack trace. I didn't look at it before, but it looks like there is a bug "
Telerik.Sitefinity.Web.PageSiteNode.get_Description"
[NullReferenceException: Object reference not set to an instance of an object.]
Telerik.Sitefinity.Web.PageSiteNode.LoadPageData() +553
Telerik.Sitefinity.Web.PageSiteNode.get_Description() +15
[TargetInvocationException: Property accessor 'Description' on object 'Telerik.Sitefinity.Web.UI.NavigationControls.SitefinitySiteMapDataSource+InnerPageSiteNode' threw the following exception:'Object reference not set to an instance of an object.']
System.ComponentModel.ReflectPropertyDescriptor.GetValue(Object component) +7829885
System.Web.UI.DataBinder.GetPropertyValue(Object container, String propName) +273
System.Web.UI.DataBinder.Eval(Object container, String[] expressionParts) +142
ASP.app_data_sitefinity_websitetemplates_simplicity_widgettemplates_navigation_mainnavigation_ascx.__DataBind__control5(Object sender, EventArgs e) in c:\inetpub\wwwroot\cpcug\App_Data\Sitefinity\WebsiteTemplates\Simplicity\WidgetTemplates\Navigation\MainNavigation.ascx:15
System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +304
System.Web.UI.Control.DataBindChildren() +11413863
System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +321
System.Web.UI.Control.DataBindChildren() +11413863
System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +321
System.Web.UI.WebControls.Repeater.CreateItem(Int32 itemIndex, ListItemType itemType, Boolean dataBind, Object dataItem) +185
System.Web.UI.WebControls.Repeater.CreateControlHierarchy(Boolean useDataSource) +627
System.Web.UI.WebControls.Repeater.OnDataBinding(EventArgs e) +167
System.Web.UI.WebControls.Repeater.EnsureDataBound() +84
System.Web.UI.WebControls.Repeater.OnPreRender(EventArgs e) +20
System.Web.UI.Control.PreRenderRecursiveInternal() +113
System.Web.UI.Control.PreRenderRecursiveInternal() +222
System.Web.UI.Control.PreRenderRecursiveInternal() +222
System.Web.UI.Control.PreRenderRecursiveInternal() +222
System.Web.UI.Control.PreRenderRecursiveInternal() +222
System.Web.UI.Control.PreRenderRecursiveInternal() +222
System.Web.UI.Control.PreRenderRecursiveInternal() +222
System.Web.UI.Control.PreRenderRecursiveInternal() +222
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +4201
Hello Tom Miller,
Actually the SitefinitySiteMapDataSource control provides datasaource of type PageSiteNode, which does not have the Description property directly exposed (even if it did, the actual Description you're setting from the Sitefinity UI is a property of the PageData object in the node). We'll need to modify slightly the provided template so we can include a codebehind file and access the PageSiteNode in the ItemDataBoud event of the repeater. There we'll get the PageNode corresponding to that PageSiteNode, and access the PageData object in it. Now it's safe to get the Description and display it in your template using a compatible control (for example, I've used a Label control). Please take a look at the below modification to the template and a screenshot of its functionality:
template:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Simplicity.ascx.cs" Inherits="SitefinityWebApp.ControlTemplates.Navigation.Simplicity" %>
<%@ Register Assembly="Telerik.Sitefinity" Namespace="Telerik.Sitefinity.Web.UI.NavigationControls" TagPrefix="sfMap" %>
<
sfMap:SitefinitySiteMapDataSource
runat
=
"server"
ID
=
"SitefinitySiteMapDS"
ShowStartingNode
=
"false"
/>
<
telerik:RadTabStrip
ID
=
"RadPanelbarNav"
runat
=
"server"
Visible
=
"true"
/>
<
asp:Repeater
ID
=
"Repeater1"
runat
=
"server"
DataSourceID
=
"SitefinitySiteMapDS"
>
<
HeaderTemplate
>
<
ul
class
=
"nav-holder"
>
</
HeaderTemplate
>
<
ItemTemplate
>
<
li
>
<
a
id
=
"A1"
href='<%# Eval("Url") %>' runat='server'>
<
h3
><%#Eval ("Title") %></
h3
>
<
p
><
asp:Label
runat
=
"server"
ID
=
"descrLbl"
></
asp:Label
></
p
>
</
a
>
</
li
>
</
ItemTemplate
>
<
FooterTemplate
>
</
ul
>
</
FooterTemplate
>
</
asp:Repeater
>
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Web;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
Telerik.Sitefinity.Pages.Model;
using
Telerik.Sitefinity.Web;
using
Telerik.Sitefinity.Modules.Pages;
using
Telerik.Sitefinity.Data;
namespace
SitefinityWebApp.ControlTemplates.Navigation
public
partial
class
Simplicity : System.Web.UI.UserControl
protected
void
Page_Load(
object
sender, EventArgs e)
Repeater1.ItemDataBound +=
new
RepeaterItemEventHandler(Repeater1_ItemDataBound);
void
Repeater1_ItemDataBound(
object
sender, RepeaterItemEventArgs e)
if
(e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
var item = e.Item.DataItem
as
PageSiteNode;
var pageManager = PageManager.GetManager();
PageNode pageNode;
using
(
new
ElevatedModeRegion(pageManager))
pageNode = pageManager.GetPageNode(item.Id);
Label descrLabel = e.Item.FindControl(
"descrLbl"
)
as
Label;
if
(descrLabel !=
null
&& pageNode.Page !=
null
)
descrLabel.Text = pageNode.Page.Description.ToString();
As you can see it isn't picking up the description value from the page.
I now know why "visible" is set to false, the skin doesn't want the
tabs showing. It seems like there must be a better control to base this
off of.
I haven't set this up as a control yet, just want to get the raw version working first then turn it into a widget. So I removed this bit of code: Inherits="SitefinityWebApp.ControlTemplates.Navigation.Simplicity" %>
Hello Tom Miller,
Let me elaborate a little bit on the modification that were done to the template, so you can get the idea better:
By default this template will use SiteMapDataSource which is fine, however it will just take the whole SiteMap and render it in your Navigation. Like we discussed earlier, the problem is coming from the fact that asp:SiteMapDataSource does not address the ShowInNavigation property and the permission set of Sitefinity Pages. That's why we have developed our SitefinitySiteMapDataSource control, which takes care of the above logic out of the box. So once we substitute the SiteMapDataSource with SitefinitySiteMapDataSource in the template, we'll need to modify the default functionality <%#Eval ("Description") %>
as this will no longer work - the output type of SitefinitySiteMapDataSource is PageSiteNode, and the actual description of a Sitefinity page is stored in the Description property of the PageData object located inside the PageSiteNode. For that purpose we have introduced an asp:Label control on your template which replaces the <%#Eval ("Description") %>
code. Then we need to have a codebehind file where we can execute certain server-side logic that will get the PageData object from the PageSiteNode supplied by SitefinitySiteMapDataSource and will set dynamically the label for each node.
In conclusion, there is no way for the template to display the correct Description, without the codebehind file where the actual logic for setting this value to the Label is executed. You can still use the full set I've sent you - the template and its codebehind as a widget template and as a standalone widget, it's up to your preference.
Regards,
Boyan Barnev
the Telerik team
That is what I did. I also had to set the CssClass="navigation" for the navigation widget , which I didn't have to do before. The three files affecting this are below. here is the website: http://71.191.139.2/cpcug
MainNavigation.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="MainNavigation.ascx.cs" %>
<%@ Register Assembly="Telerik.Sitefinity" Namespace="Telerik.Sitefinity.Web.UI.NavigationControls" TagPrefix="sfMap" %>
<
sfMap:SitefinitySiteMapDataSource
runat
=
"server"
ID
=
"SitefinitySiteMapDS"
ShowStartingNode
=
"false"
/>
<
telerik:RadTabStrip
ID
=
"RadPanelbarNav"
runat
=
"server"
Visible
=
"false"
/>
<
asp:Repeater
ID
=
"Repeater1"
runat
=
"server"
DataSourceID
=
"SitefinitySiteMapDS"
>
<
HeaderTemplate
>
<
ul
class
=
"main-nav-holder"
>
</
HeaderTemplate
>
<
ItemTemplate
>
<
li
>
<
a
id
=
"A1"
href='<%# Eval("Url") %>' runat='server'>
<
h3
><%#Eval ("Title") %></
h3
>
<
p
><
asp:Label
runat
=
"server"
ID
=
"descrLbl"
></
asp:Label
></
p
>
</
a
>
</
li
>
</
ItemTemplate
>
<
FooterTemplate
>
</
ul
>
</
FooterTemplate
>
</
asp:Repeater
>
MainNavigation.ascx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Telerik.Sitefinity.Pages.Model;
using Telerik.Sitefinity.Web;
using Telerik.Sitefinity.Modules.Pages;
using Telerik.Sitefinity.Data;
namespace SitefinityWebApp.ControlTemplates.Navigation
public partial class Simplicity : System.Web.UI.UserControl
protected void Page_Load(object sender, EventArgs e)
Repeater1.ItemDataBound += new RepeaterItemEventHandler(Repeater1_ItemDataBound);
void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
var item = e.Item.DataItem as PageSiteNode;
var pageManager = PageManager.GetManager();
PageNode pageNode;
using (new ElevatedModeRegion(pageManager))
pageNode = pageManager.GetPageNode(item.Id);
Label descrLabel = e.Item.FindControl("descrLbl") as Label;
if (descrLabel != null && pageNode.Page != null)
descrLabel.Text = pageNode.Page.Description.ToString();
body
padding:0;
margin:0;
font-size: 12px;
font-family: Arial, Helvetica, sans-serif;
background-color: #333;
color: #757575;
.main-body
background-color: #151515;
color: #757575;
a img
border:0;
#wrapper
position:relative;
float: left;
width: 1050px;
margin-left: -500px;
left: 50%;
#top
width: 100%;
margin-top: 20px;
margin-bottom: 20px;
div.navigation
position:relative;
float: left;
width: 100%;
height: 50px;
background-color: black;
border-bottom: 4px solid #39a5d4
div.navigation ul.main-nav-holder
list-style: none;
padding: 0px;
margin: 0px;
position: relative;
float: left;
width: 100%;
border-bottom: 1px solid #61b7dd;
height: 50px;
div.navigation ul.main-nav-holder li
position: relative;
float: left;
width: 175px;
div.navigation ul.main-nav-holder li a
display: block;
padding-left: 10px;
padding-right: 10px;
padding-top: 3px;
height: 51px;
margin-top: 0px;
text-decoration: none;
border-right: 2px solid #1f1f1f;
div.navigation ul.main-nav-holder li a:hover h3
color: #39a5d4;
div.navigation ul.main-nav-holder li a:hover p
color: #ccc;
div.navigation ul.main-nav-holder li a h3
font-size: 14px;
padding: 2px;
margin: 0px;
font-weight: bold;
color: white;
div.navigation ul.main-nav-holder li a p
color: #808080;
font-size: 11px;
margin-top: 4px;
div.NavigationHorz
position:relative;
float: left;
width: 100%;
height: 40px;
background-color: black;
margin-bottom: 15px;
div.NavigationHorz ul.rtsUL
list-style: none;
padding: 0px;
margin-bottom: 20px;
position: relative;
float: left;
width: 100%;
height: 40px;
div.NavigationHorz ul li.rtsLI
position: relative;
float: left;
width: 175px;
text-align: left;
div.NavigationHorz ul li.rtsLI a
display: block;
padding-left: 0px;
padding-right: 0px;
padding-top: 12px;
margin: 0px;
font-size: 14px;
font-weight: bold;
color: white;
text-decoration: none;
text-align: left;
background-color: black;
border-right: 2px solid #1f1f1f;
div.NavigationHorz ul li.rtsLI a:hover
color: #39a5d4;
div.NavigationVert ul.rtsUL
list-style: none;
padding: 0px;
margin: 0px;
position: relative;
height: 100%;
width: 275px;
border-top: 3px solid #1f1f1f;
background-color: black;
div.NavigationVert ul li.rtsLI
position: relative;
height: 100%;
border-right: 4px solid #39a5d4;
div.NavigationVert ul li.rtsLI a
display: block;
padding-left: 0px;
padding-right: 10px;
padding-top: 6px;
height: 24px;
margin: 0px;
font-size: 14px;
font-weight: bold;
color: white;
text-decoration: none;
text-align: left;
background-color: black;
border-bottom: 3px solid #1f1f1f;
div.NavigationVert ul li a:hover
color: #39a5d4;
div.NavigationFooter
position: relative;
display: block;
float: left;
height: 25px;
width: 100%;
margin-left: auto;
margin-right: auto;
margin-bottom: 20px;
div.NavigationFooter ul.rtsUL
list-style: none;
padding: 0px;
position: relative;
float: left;
width: 100%;
div.NavigationFooter ul li.rtsLI
position: relative;
width: 150px;
float: left;
text-align: center;
div.NavigationFooter ul li.rtsLI a
padding-left: 0px;
padding-right: 0px;
margin: 0px;
font-size: 12px;
font-weight: bold;
color: #39a5d4;
text-decoration: none;
text-align: center;
div.NavigationFooter ul li.rtsLI a:hover
color: white;
#content, #footer
position:relative;
float:left;
width: 100%;
#content
margin-top: 36px;
#content .sfContentBlock h1
font-size:30px;
margin-top: 0px;
line-height: 35px;
margin-bottom: 20px;
color: white;
letter-spacing: -2px;
border-bottom: 1px solid #222;
padding-bottom: 15px;
#content .sfContentBlock p
line-height: 20px;
font-size: 12px;
color: #7a7a7a;
#content .sidebar
.RadSiteMap_sidebar, .RadSiteMap_sidebar ul
position:relative;
float:left;
width: 100%;
line-height: 24px;
.RadSiteMap_sidebar
border-right: 1px solid #1f1f1f;
.RadSiteMap_sidebar ul
width: 90%;
.RadSiteMap_sidebar ul ul
width: 100%;
.RadSiteMap_sidebar .rsmLevel a.rsmLink
color: #3ba7d6;
font-size: 14px;
letter-spacing: -1px;
font-weight: bold;
margin: 0px;
padding: 0px;
border-bottom: 1px solid #1f1f1f;
text-indent: 5px;
.RadSiteMap_sidebar .rsmLevel a.rsmLink:hover
color: #888;
.RadSiteMap_sidebar .rsmLevel1
margin-bottom: 25px !important;
.RadSiteMap_sidebar .rsmLevel1 .rsmItem
border-bottom: 1px solid #1f1f1f;
.RadSiteMap_sidebar .rsmLevel1 .rsmItem a
font-size: 11px;
text-indent: 0px;
color: #757575;
letter-spacing: normal;
font-weight: normal;
.RadSiteMap_sidebar .rsmLevel1 .rsmItem a:hover
color: #0071c0;
#footer
border-top:3px solid #2f2f2f;
padding-top: 20px;
margin-top: 30px;
padding-bottom: 20px;
#footer h1
margin: 0px;
padding: 0px;
color: #fff;
#footer
color: #757575;
#footer p
margin-top: 3px;
border-bottom: 1px dotted #666;
padding-bottom: 15px;
.sfContentBlock strong
color: #fff;
a
color: #0071c0;
text-decoration: none;
.blog-list
list-style:none;
padding: 0px;
position:relative;
float:left;
padding-right: 20px;
border-right: 1px solid #333;
margin: 0px;
.blog-post
margin-bottom: 35px;
position: relative;
float: left;
width: 100%;
padding-bottom: 35px;
border-bottom: 1px solid #202020;
.blog-date-and-author
position: relative;
float:left;
width: 150px;
line-height: 23px;
font-size: 11px;
color: #999;
text-indent: 10px;
.blog-title-and-summary
position:relative;
float: left;
width: 490px;
.blog-date
position:relative;
float:left;
width:138px;
height:23px;
background-image: url(../Images/blog_date.jpg);
font-size: 12px;
color: #fff;
text-indent: 10px;
font-weight: bold;
line-height: 23px;
.blog-title-and-summary h2.post-title
line-height: 22px;
font-size: 18px;
font-weight: bold;
letter-spacing: -1px;
margin: 0px;
padding: 0px;
margin-bottom: 20px;
.post-summary
line-height: 20px;
color: #757575;
.events-list
list-style: none;
padding: 0px;
margin: 0px;
position:relative;
float:left;
border-right: 1px solid #333;
.events-list .event
position:relative;
float: left;
width: 100%;
.event-date
position:relative;
float:left;
text-align: right;
color: #757575;
font-size: 11px;
width: 150px;
padding-right: 20px;
.event-title-and-summary
position: relative;
float:left;
width: 460px;
padding-left: 20px;
border-left: 1px solid #333;
margin-bottom: 40px;
color: #757575;
font-size: 11px;
.event-dates
font-size: 18px;
font-weight: bold;
color: #fff;
h2.event-title
font-size: 18px;
padding: 0px;
margin: 0px;
letter-spacing: -1px;
h1.sfeventTitle, h1.sfpostTitle
color: white;
.event-summary
font-size: 12px;
line-height: 18px;
padding-top: 25px;
h2.event-title a:hover
color: #fff;
.sfContentBlock h3
border-bottom: 1px solid #444;
padding-bottom: 5px;
margin-bottom: 5px;
letter-spacing: -1px;
color: #fff;
ul.sftaxonHorizontalList
padding: 0px;
margin: 0px;
list-style: none;
ul.sftaxonHorizontalList li
line-height: 25px;
border-bottom: 1px solid #444;
.sf_pagerNumeric
position: relative;
float:left;
width: 100%;
.sf_pagerNumeric a
display: block;
width: 30px;
height: 30px;
background-color: #444;
color: #ccc;
text-align:center;
line-height: 30px;
font-size: 13px;
font-weight: bold;
position:relative;
float:left;
margin-right: 1px;
.sf_pagerNumeric a:hover
background-color: #666;
a.sf_PagerCurrent
background-color: #0071c0;
color: white;
.sfFormInstructions
color: #757575;
line-height: 18px;
.sfFormTitle
font-size: 15px;
letter-spacing: -1px;
.sfTxt
border: 1px solid #555;
background-color: #333;
padding: 5px;
width: 90%;
font-size: 12px;
color: #fff;
.sfTxt:hover, .sfTxt:focus
border: 1px solid #aaa;
.sfTxtLbl
font-size: 13px;
color: #0071c0;
font-weight: bold;
line-height: 25px;
.sfFormBox, .sfFormBlock
padding-bottom: 15px;
position:relative;
width: 100%;
float:left;
.sfExample
color: #757575;
font-size: 11px;
.sfRadioList input
position: relative;
float: left;
.sfRadioList label
display: block;
line-height: 20px;
position: relative;
.sfRadioList br
display: none;
.sfFormSubmit
padding-top: 25px;
.sfFormSubmit input, .sfcommentsSubmitBtnWrp input
background-color: #0071c0;
color: white;
font-weight: bold;
font-size: 13px;
padding: 10px 15px 10px 15px;
border: 0px;
font-family: Georgia, "Times New Roman", Times, serif;
.sfError
line-height: 25px;
background-color: #0071c0;
color: white;
font-size: 11px;
text-indent: 15px;
position:relative;
float:left;
padding-right: 15px;
margin-top: 10px;
margin-bottom: 15px;
.sfcommentsForm
border: 0px;
position:relative;
float:left;
width: 100%;
.sfcommentsFieldsList
list-style: none;
padding: 0px;
.sfpostContent p, .sfeventContent, .sfeventDatesLocationContacts
line-height: 18px;
color: #757575;
.sfcommentsList
line-height: 18px;
color: #757575;
.sfcommentNumber
display: none;
h2#comments, h2.sfcommentsTitle
padding-top: 15px;
border-top: 3px solid #888;
color: white;
margin-top: 15px;
position:relative;
float:left;
width: 100%;
li.sfcommentDetails
position:relative;
float:left;
width: 100%;
margin-bottom: 25px;
padding-bottom: 25px;
border-bottom: 1px solid #333;
.ToggleAdvancedToolbars
color: #0071c0;
Hi Tom Miller,
I have inspected the link you provided me with, and indeed it looks like the template has been applied correctly. Would it be possible for you to provide us with a backup of your project database, and an archive of the project files, so we can set it up locally and inspect what might be going on, as the sample's been working fine on our side. Thanks in advance.
Best wishes,
Boyan Barnev
the Telerik team
SQL Server isn't my thing (I am an Oracle expert). Having one of the IT guys work on a backup of the DB. How would you like me to provide the backup of the site? zip? I will put it all on an FTP site and provide you a link(s) privately soon.
Thanks!
I have a scenario where I'm making pages not public. If you try opening the pages (when logged out) the pages are not served. Great.
I have the following code that gets the pages but I'm not sure how to determine if the user viewing the node has permission. I've applied permissions to pages so I'd like to determine how to not display a node if the user does not have permission
try
RadPanelItem item = e.Item;
PageSiteNode dataItem = (PageSiteNode)e.Item.DataItem;
if (!dataItem.ShowInNavigation)
if (item.Level > 0)
RadPanelItem pi = (RadPanelItem)item.Parent;
pi.Items.Remove(item);
else
this.PanelBar.Items.Remove(item);
return;
Hi
I upgraded my application to v7.3 but I am getting error somewhere else. When I visit any page that has Sitefinity Event Calendar on it is throwing an errorTelerik.Web.UI. RadWindowManager with ID= ‘RadWindowManager‘was unable to find embedded skin with name Sitefinity. Please, make sure that you spelled the skin name correctly, or if you want to use a custom skin, set EnableEmbeddedSkins=false.To solve this I have added EnableEmbeddedSkins=”false” to<telerik:RadWindowManager id="radWindowManager" runat="server" Modal="True" Skin="Sitefinity">
Line and it worked on development machine, staging server but giving error on production server as belowCannot create an object of type ‘System.Boolean’ from its string representation “false” for “EnableEmbeddedSkins” property.I am not able to work around this. Please suggest a solution.
Thanks.
Hi Vakeel,
We have already answered you in another forum thread:
http://www.sitefinity.com/developer-network/forums/designing-styling/upgraded-to-7-1---need-help-styling-vertical-menus#6zQTLmDAAkCvFalkmck7Zg