public void SetCatalogPageFilter(ICatalogPageFilter filter) { if (this.catalogPageFilter != null) { throw new InvalidOperationException("Catalog page filter is already defined."); } this.catalogPageFilter = filter; this.catalogPageItem = currentItem; if (context.HasCatalogUrl && filter.Validate(context.CatalogUrlSegments)) { object resolvedItem = filter.Execute(context.CatalogUrlSegments); if (resolvedItem == null) { this.catalogPageMode = CatalogPageMode.ItemNotFound; } else if (resolvedItem.GetType().GetEnumeratedType() != null) { catalogItems.AddRange(((IEnumerable)resolvedItem).OfType <object>()); this.catalogPageMode = CatalogPageMode.Listing; } else { this.currentItem = resolvedItem; this.catalogPageMode = CatalogPageMode.Item; if (this.currentItem is ISeoMetaProvider) { seoMeta.Insert(0, (ISeoMetaProvider)currentItem); } } } else { this.catalogPageMode = CatalogPageMode.Listing; } }
/// <summary> /// Sets the catalog page filter explicitly to create context for catalog page. /// </summary> /// <param name="filter"></param> public static void SetCatalogPageFilter(ICatalogPageFilter filter) { CommonHelper.ConfirmNotNull(filter, "filter"); TaxonomyNavigationRequestContext instance = CommonHelper.HttpContextSingleton <TaxonomyNavigationRequestContext>(); instance.SetCatalogPageFilter(filter); }
public TaxonomyNavigationRequestContext() { this.context = TaxonomyNavigationContext.Current; this.variation = VariationContext.Current; if (context.HasNavigationContext) { this.navigationTerm = context.NavigationTerm; } else { using (new SPSecurity.GrantAdditionalPermissionsInScope(SPBasePermissions.FullMask)) { SPWeb currentWeb = SPContext.Current.Web; string url = TaxonomyNavigationHelper.ResolveFriendlyUrl(currentWeb, SPUrlUtility.CombineUrl(currentWeb.ServerRelativeUrl, currentWeb.RootFolder.WelcomePage)); TaxonomyNavigationHelper.TryGetNavigationTerm(url, out this.navigationTerm, out url); } } if (this.navigationTerm == null) { NavigationTermSet termSet; TaxonomyNavigationHelper.IsRequestingNavigationTermSet(out termSet); this.navigationTermSetItem = termSet; } else { this.navigationTermSetItem = navigationTerm; } if (context.HasFriendlyUrl || context.HasCatalogUrl) { this.serverRelativeRequestUrl = context.ResolvedDisplayUrl; } else if (navigationTermSetItem != null) { this.serverRelativeRequestUrl = navigationTermSetItem.GetResolvedDisplayUrl(null); } else { this.serverRelativeRequestUrl = SPUtility.OriginalServerRelativeRequestPath; } this.variationRelativeRequestUrl = PublishingWebHelper.TrimVariationFromPath(serverRelativeRequestUrl); this.query = HttpUtility.ParseQueryString(HttpContext.Current.Request.Url.Query); query.Remove(null); query.Remove("TermStoreId"); query.Remove("TermSetId"); query.Remove("TermId"); this.queryString = query.AllKeys.Length > 0 ? "?" + query : String.Empty; SPListItem listItem = SPContext.Current.ListItem; if (listItem != null) { this.currentItem = SPModel.TryCreate(listItem); } if (currentItem is ICatalogPage) { ICatalogPageFilter filter = CommonHelper.AccessNotNull(((ICatalogPage)currentItem).Filter, "Filter"); SetCatalogPageFilter(filter); } if (currentItem is ISeoMetaProvider) { seoMeta.Add((ISeoMetaProvider)currentItem); } seoMeta.Add(new SeoMetaListItem(listItem)); for (NavigationTerm t = navigationTerm; t != null; t = t.Parent) { seoMeta.Add(new SeoMetaNavigationTerm(listItem.Web, t)); } }