Exemple #1
0
        /// <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);
     }
 }
Exemple #5
0
        /// <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);
        }
Exemple #6
0
 /// <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);
 }
Exemple #7
0
 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);
 }
Exemple #8
0
 /// <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;
 }
Exemple #9
0
        /// <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);
        }
Exemple #10
0
 public MockupSiteMapMenuItem(ISiteMapMenuItem parentNode)
 {
     this.ParentNode = parentNode;
 }