/// <summary> /// Gets the breadcrumbs. /// </summary> /// <param name="output">The output.</param> /// <param name="item">The item.</param> /// <returns></returns> protected virtual StringBuilder GetBreadcrumbs(StringBuilder output, ISiteMapMenuItem item) { if (item.ParentNode != null) { item = item.ParentNode; if (!this.ShowRootNode && item.ParentNode == null) {// don't render the root node return(output); } // insert link output.Insert(0, @"<a" + (string.IsNullOrEmpty(LinkCssClass) ? ("") : (@" class=""" + LinkCssClass + @"""")) + @" href=""" + ResolveUrl((item.UrlRewriteItem.Url + item.UrlRewriteItem.Path).Replace("//", "/")) + @""">" + (string.IsNullOrEmpty(item.BreadcrumbTitle) ? ResolveUrl(item.UrlRewriteItem.FullVirtualPath) : item.BreadcrumbTitle) + @"</a>"); if ((item.ParentNode == null && this.ShowFirstSeparator) || (item.ParentNode != null)) { // insert separator if (!string.IsNullOrEmpty(this.VirtualSeparatorImageUrl)) { output.Insert(0, "<img alt=\"\" border=\"0\" src=\"" + ResolveUrl(this.VirtualSeparatorImageUrl) + "\"/>"); } else { output.Insert(0, "<span" + (string.IsNullOrEmpty(SeparatorCssClass) ? ("") : (@" class=""" + SeparatorCssClass + @"""")) + ">" + Separator + "</span>"); } } return(GetBreadcrumbs(output, item)); } return(output); }
private ISiteMapMenuItem GetMenuItemsRecursive(ISiteMapMenuItem parent, List <ISiteMapMenuItem> items, XElement menuNode) { MockupSiteMapMenuItem item = new MockupSiteMapMenuItem(parent); if (menuNode.Attribute("name") != null) { item.Name = menuNode.Attribute("name").Value; } if (menuNode.Attribute("urlRewriteItemName") != null) { item.UrlRewriteItemName = menuNode.Attribute("urlRewriteItemName").Value; } if (menuNode.Attribute("breadcrumbTitle") != null) { item.BreadcrumbTitle = menuNode.Attribute("breadcrumbTitle").Value; } if (menuNode.Attribute("title") != null) { item.Title = menuNode.Attribute("title").Value; } foreach (XElement element in menuNode.Elements("menunode")) { item.ChildNodes.Add(GetMenuItemsRecursive(item, items, element)); } return(item); }
private void LoadBreadcrumbs(ISiteMapMenuItem item) { if (item.ParentNode != null) { item = item.ParentNode; // insert link NavigationBreadcrumbsSkin control = this.Page.LoadControl(this.ClickableNodeControlToLoad) as NavigationBreadcrumbsSkin; if (control != null) { control.MenuItem = item; control.IsLastNode = false; this.Controls.AddAt(0, control); } if ((item.ParentNode == null && this.ShowFirstSeparator) || (item.ParentNode != null)) { // insert separator this.Controls.AddAt(0, this.Page.LoadControl(this.SeparatorControlToLoad)); } LoadBreadcrumbs(item); } }
private void LoadRewriteItems(ISiteMapMenuItem item) { item.UrlRewriteItem = UrlRewriteController.GetUrlRewriteItem(item.UrlRewriteItemName); foreach (ISiteMapMenuItem child in item.ChildNodes) { LoadRewriteItems(child); } }
/// <summary> /// Gets the matching site map menu item. /// </summary> /// <param name="menuName">Name of the menu.</param> /// <param name="pathAndQuery">The path and query.</param> /// <param name="useCache">if set to <c>true</c> [use cache].</param> /// <returns></returns> public ISiteMapMenuItem GetMatchingSiteMapMenuItem(string menuName, string pathAndQuery, bool useCache) { if (!this.SiteMapMenus.ContainsKey(menuName)) { throw new NavigationException("Menu " + menuName + " not found at the SiteMapMenu section."); } ISiteMapMenu menu = this.SiteMapMenus[menuName]; IUrlRewriteItem rewriteItem; if (useCache && menu.EnableCaching) {// we want to get the menu item from cache // define cachekey string cacheKey = "__" + menuName + "_" + pathAndQuery; lock (_ISiteMapMenuItemLock) { ISiteMapMenuItem item = HttpRuntime.Cache[cacheKey] as ISiteMapMenuItem; if (item != null) {// item found at cache collection, so return it return(item); } else {// item not found at cache collection, so find/insert it rewriteItem = this.SiteMapUrls.GetMatchingRewriteItem(pathAndQuery); if (rewriteItem != null) { item = menu.GetMatchingSiteMapMenuItem(rewriteItem.Name); } if (item != null) { HttpRuntime.Cache.Remove(cacheKey); HttpRuntime.Cache.Insert(cacheKey , item , null , DateTime.Now.AddSeconds(menu.CacheDurationInSeconds) , Cache.NoSlidingExpiration , menu.CacheItemPriority , null); return(item); } } } } rewriteItem = this.SiteMapUrls.GetMatchingRewriteItem(pathAndQuery); if (rewriteItem != null) { return(menu.GetMatchingSiteMapMenuItem(rewriteItem.Name)); } return(null); }
/// <summary> /// Gets the matching site map menu item. /// </summary> /// <param name="item">The item.</param> /// <param name="name">The name.</param> /// <returns></returns> public ISiteMapMenuItem GetMatchingSiteMapMenuItem(ISiteMapMenuItem item, string name) { if (item.Name == name) { return(item); } else { foreach (ISiteMapMenuItem child in item.ChildNodes) { return(GetMatchingSiteMapMenuItem(child, name)); } } return(null); }
private ISiteMapMenuItem GetMatchingSiteMapMenuItem(ISiteMapMenuItem item, string name) { if (item.UrlRewriteItemName == name) { return(item); } else { ISiteMapMenuItem match; foreach (ISiteMapMenuItem child in item.ChildNodes) { match = GetMatchingSiteMapMenuItem(child, name); if (match != null) { return(match); } } } return(null); }
/// <summary> /// Initializes a new instance of the <see cref="SiteMapMenuItemElement"/> class. /// </summary> /// <param name="parentNode">The parent node.</param> public SiteMapMenuItemElement(ISiteMapMenuItem parentNode) { this.ParentNode = parentNode; }
/// <summary> /// Gets generic site map menus from a given XmlReader. /// </summary> /// <param name="parent">The parent.</param> /// <param name="items">The items.</param> /// <param name="menuNode">The menu node.</param> /// <returns></returns> protected ISiteMapMenuItem GetMenuItemsRecursive(ISiteMapMenuItem parent, List <ISiteMapMenuItem> items, XElement menuNode) { TISiteMapMenuItem item = new TISiteMapMenuItem(); #region get properties object[] attributes; object value; SiteMapMenuPropertyAttribute propertyAttribute; PropertyInfo[] propertyInfos = item.GetType().GetProperties(); if (propertyInfos != null) { foreach (PropertyInfo info in propertyInfos) { attributes = (object[])info.GetCustomAttributes(typeof(SiteMapMenuPropertyAttribute), false); if (attributes.Length > 0) {// attribute exists propertyAttribute = ((SiteMapMenuPropertyAttribute)attributes[0]); if (menuNode.Attribute(propertyAttribute.PropertyName) != null) { if (info.PropertyType != Type.GetType("System.String") && string.IsNullOrEmpty(menuNode.Attribute(propertyAttribute.PropertyName).Value)) { continue; } // first try to convert the value of the menuNode to the correct type try { value = Convert.ChangeType(menuNode.Attribute(propertyAttribute.PropertyName).Value, info.PropertyType); } catch (Exception err) { throw new NavigationException("Error at converting SiteMapMenu property value " + menuNode.Attribute(propertyAttribute.PropertyName).Value + " to type " + info.PropertyType.ToString() + ". See inner exception for further details.", err); } // now set the value of the object try { info.SetValue(item, value, null); } catch (Exception err) { throw new NavigationException("Error at setting property value " + menuNode.Attribute(propertyAttribute.PropertyName).Value + " for property " + info.Name + ". See inner exception for further details.", err); } } } } } #endregion if (menuNode.Attribute("name") != null) { item.Name = menuNode.Attribute("name").Value; } if (menuNode.Attribute("urlRewriteItemName") != null) { item.UrlRewriteItemName = menuNode.Attribute("urlRewriteItemName").Value; } if (menuNode.Attribute("breadcrumbTitle") != null) { item.BreadcrumbTitle = menuNode.Attribute("breadcrumbTitle").Value; } if (menuNode.Attribute("title") != null) { item.Title = menuNode.Attribute("title").Value; } item.ParentNode = parent; foreach (XElement element in menuNode.Elements("menunode")) { item.ChildNodes.Add(GetMenuItemsRecursive(item, items, element)); } return(item); }
public MockupSiteMapMenuItem(ISiteMapMenuItem parentNode) { this.ParentNode = parentNode; }