Exemple #1
0
        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));
            }
        }
Exemple #4
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
                });
            }
        }