Ejemplo n.º 1
0
        /// <summary>
        /// Gets Navigation Links for the context navigation panel for the given request URL path.
        /// </summary>
        /// <param name="requestUrlPath">The request URL path.</param>
        /// <param name="localization">The Localization.</param>
        /// <returns>The Navigation Links.</returns>
        public NavigationLinks GetContextNavigationLinks(string requestUrlPath, Localization localization)
        {
            using (new Tracer(requestUrlPath, localization))
            {
                SitemapItem navModel = GetNavigationModel(localization);
                if (!(navModel is TaxonomyNode))
                {
                    // No Navigation Taxonomy found in this Localization; fallback to the StaticNavigationProvider.
                    return(_fallbackNavigationProvider.GetContextNavigationLinks(requestUrlPath, localization));
                }

                SitemapItem contextNode = navModel.FindSitemapItem(requestUrlPath.NormalizePageUrlPath());
                if (contextNode != null && !(contextNode is TaxonomyNode))
                {
                    contextNode = contextNode.Parent;
                }

                List <Link> links = new List <Link>();
                if (contextNode != null)
                {
                    links.AddRange(contextNode.Items.Where(i => i.Visible).Select(i => i.CreateLink(localization)));
                }

                return(new NavigationLinks
                {
                    Items = links
                });
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Gets Navigation Links for the breadcrumb trail for the given request URL path.
        /// </summary>
        /// <param name="requestUrlPath">The request URL path.</param>
        /// <param name="localization">The Localization.</param>
        /// <returns>The Navigation Links.</returns>
        public NavigationLinks GetBreadcrumbNavigationLinks(string requestUrlPath, Localization localization)
        {
            using (new Tracer(requestUrlPath, localization))
            {
                SitemapItem navModel = GetNavigationModel(localization);
                if (!(navModel is TaxonomyNode))
                {
                    // No Navigation Taxonomy found in this Localization; fallback to the StaticNavigationProvider.
                    return(_fallbackNavigationProvider.GetBreadcrumbNavigationLinks(requestUrlPath, localization));
                }

                SitemapItem sitemapItem = navModel.FindSitemapItem(requestUrlPath.NormalizePageUrlPath());

                List <Link> breadcrumb = new List <Link>();

                if (sitemapItem != null)
                {
                    // Build a breadcrumb of ancestors, excluding the Taxonomy Root.
                    bool hasHome = false;
                    while (sitemapItem.Parent != null)
                    {
                        breadcrumb.Insert(0, sitemapItem.CreateLink(localization));
                        hasHome     = IsHome(sitemapItem, localization);
                        sitemapItem = sitemapItem.Parent;
                    }

                    // The Home TaxonomyNode/Keyword may be a top-level sibling instead of an ancestor
                    if (!hasHome)
                    {
                        SitemapItem home = sitemapItem.Items.FirstOrDefault(i => IsHome(i, localization));
                        if (home != null)
                        {
                            breadcrumb.Insert(0, home.CreateLink(localization));
                        }
                    }
                }

                return(new NavigationLinks
                {
                    Items = breadcrumb
                });
            }
        }