예제 #1
0
        /// <summary></summary>
        public BreadcrumbProvider(string configPath)
        {
            var doc = XDocument.Load(configPath);

            _nodeList = new List <BreadcrumbNode>();
            _root     = mappingToNode(doc.Root);
        }
예제 #2
0
        private int GetNestingLevel(BreadcrumbNode node)
        {
            var level = 1;

            while (node.Parent != null)
            {
                node = node.Parent;
                level++;
            }

            return(level);
        }
예제 #3
0
        private void BuildBreadcrumbs(string virtualPath, Nav nav)
        {
            string action     = RouteData.Values["action"].ToString();
            string controller = RouteData.Values["controller"].ToString();

            string requestPath = virtualPath?.Trim(Separator.Path);

            BreadcrumbNode breadcrumbNode = null;

            if (!string.IsNullOrWhiteSpace(requestPath))
            {
                Stack <string> virtualNamesForScan = new Stack <string>(requestPath.Split(Separator.Path).Reverse());

                BreadcrumbNode ScanNavItem(string virtualNameForScan, IEnumerable <NavItem> navItems, BreadcrumbNode parent = null)
                {
                    if (!string.IsNullOrWhiteSpace(virtualNameForScan) &&
                        navItems.Count() > 0)
                    {
                        NavItem navItem = navItems.FirstOrDefault(x => x.VirtualPath.Equals(virtualNameForScan, StringComparison.OrdinalIgnoreCase));
                        if (navItem != null)
                        {
                            BreadcrumbNode node = new BreadcrumbNode(navItem.DisplayName, "Page", "Pages", new { navItem.VirtualPath }, parent);
                            if (virtualNamesForScan.Count > 0 && navItem.Children.Count() > 0)
                            {
                                return(ScanNavItem(virtualNameForScan + Separator.Path + virtualNamesForScan.Pop(), navItem.Children, node));
                            }
                            else
                            {
                                return(node);
                            }
                        }
                    }

                    return(parent);
                }

                breadcrumbNode = ScanNavItem(virtualNamesForScan.Pop(), nav.Items);
            }
            else
            {
                if (nav.Items.Count() > 0)
                {
                    NavItem navItem = nav.Items.First();
                    breadcrumbNode = new BreadcrumbNode(navItem.DisplayName, "Page", "Pages", new { navItem.VirtualPath });
                }
            }

            if (breadcrumbNode != null)
            {
                ViewData["BreadcrumbNode"] = breadcrumbNode;
            }
        }
예제 #4
0
        private BreadcrumbNode mappingToNode(XElement el, BreadcrumbNode parent = null)
        {
            var node = new BreadcrumbNode
            {
                Name    = attr(el, "name"),
                Url     = attr(el, "url"),
                Icon    = attr(el, "icon"),
                Pattern = attr(el, "pattern"),
                Parent  = parent,
            };

            node.ChildNodes = el.Elements("node").Select(x => mappingToNode(x, node)).ToList();

            _nodeList.Add(node);
            return(node);
        }
예제 #5
0
        public static void AppendToBreadcrumb(this HttpContext httpContext, BreadcrumbNode node)
        {
            var nodes = (List <BreadcrumbNode>)httpContext.Items[BreadcrumbKey];

            if (nodes == null)
            {
                nodes = new List <BreadcrumbNode>()
                {
                    new BreadcrumbNode()
                    {
                        DisplayText = LocalizationHelper.Localize("Home", ApplicationEngine.CurrentLanguageCultureCode),
                        Url         = ApplicationEngine.RouteUrl(RouteNames.Home, absoluteUrl: true)
                    }
                };
                httpContext.Items[BreadcrumbKey] = nodes;
            }
            nodes.Add(node);
        }
예제 #6
0
 static Breadcrumb()
 {
     _tree = BreadcrumbCollector.Collect(Assembly.GetExecutingAssembly());
 }