public void GetBreadcrumbNavigationLinks_Root_Success() { ILocalization testLocalization = TestFixture.ParentLocalization; NavigationLinks navLinks = _testNavigationProvider.GetBreadcrumbNavigationLinks(testLocalization.Path, testLocalization); Assert.IsNotNull(navLinks, "navLinks"); OutputJson(navLinks); Assert.AreEqual(1, navLinks.Items.Count, "navLinks.Items.Count"); AssertValidLink(navLinks.Items[0], testLocalization.Path + "/", "Home", null, "navLinks.Items[0]"); }
public void GetBreadcrumbNavigationLinks_UnclassifiedPage_Success() // See TSI-1916 { Localization testLocalization = TestFixture.ParentLocalization; string testPageUrlPath = testLocalization.GetAbsoluteUrlPath(TestFixture.ArticlePageRelativeUrlPath); NavigationLinks navLinks = _testNavigationProvider.GetBreadcrumbNavigationLinks(testPageUrlPath, testLocalization); Assert.IsNotNull(navLinks, "navLinks"); OutputJson(navLinks); Assert.IsNotNull(navLinks.Items, "navLinks.Items"); Assert.AreEqual(0, navLinks.Items.Count, "navLinks.Items.Count"); }
public virtual ActionResult Navigation(EntityModel entity, string navType, int containerSize = 0) { using (new Tracer(entity, navType, containerSize)) { SetupViewData(entity, containerSize); INavigationProvider navigationProvider = SiteConfiguration.NavigationProvider; string requestUrlPath = Request.Url.LocalPath; Localization localization = WebRequestContext.Localization; NavigationLinks model; switch (navType) { case "Top": model = navigationProvider.GetTopNavigationLinks(requestUrlPath, localization); break; case "Left": model = navigationProvider.GetContextNavigationLinks(requestUrlPath, localization); break; case "Breadcrumb": model = navigationProvider.GetBreadcrumbNavigationLinks(requestUrlPath, localization); break; default: throw new DxaException("Unexpected navType: " + navType); } EntityModel sourceModel = (EnrichModel(entity) as EntityModel) ?? entity; model.XpmMetadata = sourceModel.XpmMetadata; model.XpmPropertyMetadata = sourceModel.XpmPropertyMetadata; return(View(sourceModel.MvcData.ViewName, model)); } }
/// <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 }); } }