private IEnumerable <NavigationNode> GetGlobalNavigationTaxonomyNodes(SPWeb web, NavigationQueryParameters queryParameters, IEnumerable <NavigationTerm> navigationTerms = null) { // If navigation terms is null, fetch this initial terms from the taxonomy navigation term set if (navigationTerms == null) { var nodeMatchingSettings = queryParameters.NodeMatchingSettings; if ((nodeMatchingSettings != null) && nodeMatchingSettings.RestrictToCurrentNavigationLevel) { navigationTerms = TaxonomyNavigationContext.Current.NavigationTerm.Parent.Terms; } else { // Create view to return all navigation terms var view = new NavigationTermSetView(web, StandardNavigationProviderNames.GlobalNavigationTaxonomyProvider) { ExcludeTermsByProvider = false }; var navigationTermSet = TaxonomyNavigation.GetTermSetForWeb(web, StandardNavigationProviderNames.GlobalNavigationTaxonomyProvider, true); // Navigation termset might be null when crawling if (navigationTermSet == null) { return(new NavigationNode[] { }); } navigationTerms = navigationTermSet.GetWithNewView(view).Terms; } } // Gets terms which are not excluded from global navigation // Note: Navigation terms needs to be editable to get the taxonomy term var session = new TaxonomySession(web.Site); var terms = navigationTerms.Where(x => !x.ExcludeFromGlobalNavigation).Select(x => x.GetAsEditable(session)).ToArray(); var nodes = terms.Select(x => new NavigationNode(x)).ToArray(); for (var i = 0; i < terms.Length; i++) { var term = terms[i]; var node = nodes[i]; // If term contains children, recurvise call if (term.Terms.Count > 0) { node.ChildNodes = this.GetGlobalNavigationTaxonomyNodes(web, queryParameters, term.Terms); } } return(nodes); }
/// <summary> /// Get the peer url for a taxonomy navigation page (generated by a term set) /// </summary> /// <param name="currentUrl">The current page url</param> /// <param name="label">The target label to resolve</param> /// <returns>The url of the peer page</returns> public Uri GetPeerCatalogCategoryUrl(Uri currentUrl, VariationLabelInfo label) { // Get current navigation term ID var termId = TaxonomyNavigationContext.Current.NavigationTerm.Id; var labelSiteRelativeUrl = label.TopWebUrl.AbsolutePath; using (var labelWeb = SPContext.Current.Site.OpenWeb(labelSiteRelativeUrl)) { // Create view to return all navigation terms var view = new NavigationTermSetView(labelWeb, StandardNavigationProviderNames.GlobalNavigationTaxonomyProvider) { ExcludeTermsByProvider = false }; var navigationTermSet = TaxonomyNavigation.GetTermSetForWeb(labelWeb, StandardNavigationProviderNames.GlobalNavigationTaxonomyProvider, true).GetWithNewView(view); // Get the matching label navigation term and return it's friendly URL var navigationTerm = this.navigationHelper.FindNavigationTermById(navigationTermSet.Terms, termId); if (navigationTerm != null) { this.logger.Info( "GetPeerCatalogCategoryUrl: Navigation term found for term id '{0}': '{1}'", termId, navigationTerm.Title); var queryString = string.Empty; // Check if some search keywords are present var searchKeywords = HttpUtility.ParseQueryString(currentUrl.Query).Get("k"); if (!string.IsNullOrEmpty(searchKeywords)) { queryString = "?k=" + HttpUtility.UrlEncode(searchKeywords); } return(new Uri(navigationTerm.GetResolvedDisplayUrl(queryString), UriKind.Relative)); } else { this.logger.Error("GetPeerCatalogCategoryUrl: Navigation term not found for term id '{0}'", termId); return(new Uri( Variations.GetPeerUrl(SPContext.Current.Web, currentUrl.AbsoluteUri, label.Title), UriKind.Relative)); } } }
private IEnumerable<NavigationNode> GetGlobalNavigationTaxonomyNodes(SPWeb web, IEnumerable<NavigationTerm> navigationTerms = null) { // If navigation terms is null, fetch this initial terms from the taxonomy navigation term set if (navigationTerms == null) { // Create view to return all navigation terms var view = new NavigationTermSetView(web, StandardNavigationProviderNames.GlobalNavigationTaxonomyProvider) { ExcludeTermsByProvider = false }; var navigationTermSet = TaxonomyNavigation.GetTermSetForWeb(web, StandardNavigationProviderNames.GlobalNavigationTaxonomyProvider, true); // Navigation termset might be null when crawling if (navigationTermSet == null) { return new NavigationNode[] { }; } navigationTerms = navigationTermSet.GetWithNewView(view).Terms; } // Gets terms which are not excluded from global navigation // Note: Navigation terms needs to be editable to get the taxonomy term var session = new TaxonomySession(web.Site); var terms = navigationTerms.Where(x => !x.ExcludeFromGlobalNavigation).Select(x => x.GetAsEditable(session)).ToArray(); var nodes = terms.Select(x => new NavigationNode(x)).ToArray(); for (var i = 0; i < terms.Length; i++) { var term = terms[i]; var node = nodes[i]; // If term contains children, recurvise call if (term.Terms.Count > 0) { node.ChildNodes = this.GetGlobalNavigationTaxonomyNodes(web, term.Terms); } } return nodes; }
/// <summary> /// Get the peer url for a taxonomy navigation page (generated by a term set) /// </summary> /// <param name="web">The web.</param> /// <param name="currentUrl">The current page url</param> /// <param name="label">The target label to resolve</param> /// <returns> /// The url of the peer page /// </returns> public Uri GetPeerCatalogCategoryUrl(SPWeb web, Uri currentUrl, VariationLabelInfo label) { // Get current navigation term ID var termId = TaxonomyNavigationContext.Current.NavigationTerm.Id; var labelSiteRelativeUrl = label.TopWebUrl.AbsolutePath; using (var labelWeb = web.Site.OpenWeb(labelSiteRelativeUrl)) { // Create view to return all navigation terms var view = new NavigationTermSetView(labelWeb, StandardNavigationProviderNames.GlobalNavigationTaxonomyProvider) { ExcludeTermsByProvider = false }; var navigationTermSet = TaxonomyNavigation.GetTermSetForWeb(labelWeb, StandardNavigationProviderNames.GlobalNavigationTaxonomyProvider, true).GetWithNewView(view); // Get the matching label navigation term and return it's friendly URL var navigationTerm = this.navigationHelper.FindNavigationTermById(navigationTermSet.Terms, termId); if (navigationTerm != null) { this.logger.Info( "GetPeerCatalogCategoryUrl: Navigation term found for term id '{0}': '{1}'", termId, navigationTerm.Title); var queryString = string.Empty; // Check if some search keywords are present var searchKeywords = HttpUtility.ParseQueryString(currentUrl.Query).Get("k"); if (!string.IsNullOrEmpty(searchKeywords)) { queryString = "?k=" + HttpUtility.UrlEncode(searchKeywords); } return new Uri(navigationTerm.GetResolvedDisplayUrl(queryString), UriKind.Relative); } else { this.logger.Error("GetPeerCatalogCategoryUrl: Navigation term not found for term id '{0}'", termId); return new Uri( Variations.GetPeerUrl(web, currentUrl.AbsolutePath, label.Title), UriKind.Relative); } } }