public static string BuildTaxonQueryStringParams(ITaxon taxon, string urlKeyPrefix) { var evaluator = new TaxonomyEvaluator(); var taxonBuildOptions = TaxonBuildOptions.None; string taxonRelativeUrl = null; if (taxon.Taxonomy is HierarchicalTaxonomy) { taxonBuildOptions = TaxonBuildOptions.Hierarchical; taxonRelativeUrl = (taxon as HierarchicalTaxon).FullUrl; } else if (taxon.Taxonomy is FlatTaxonomy) { taxonBuildOptions = TaxonBuildOptions.Flat; taxonRelativeUrl = taxon.UrlName.Value; } var taxonQueryStringParams = evaluator.BuildUrl(taxon.Taxonomy.Name, taxonRelativeUrl, taxon.Taxonomy.Name, taxonBuildOptions, UrlEvaluationMode.QueryString, urlKeyPrefix); return(taxonQueryStringParams); }
public TaxonUrlEvaluatorAdapter() { this.taxonomyEvaluator = this.GetDefaultEvaluator(); }
public TaxonUrlEvaluatorAdapter() { this.taxonomyEvaluator = this.GetDefaultEvaluator(); }
/// <summary> /// Builds the full url for a particular taxon filter /// Override this method to change the pattern of the url /// </summary> /// <param name="taxonRelativeUrl">The taxon relative URL.</param> /// <returns></returns> protected virtual string BuildUrl(string taxonRelativeUrl) { var url = this.BaseUrl; if (string.IsNullOrEmpty(url)) { var siteMap = SiteMapBase.GetCurrentProvider(); if (siteMap == null || (siteMap != null && siteMap.CurrentNode == null)) { return(string.Empty); } var psn = siteMap.CurrentNode as PageSiteNode; if (psn != null) { // Check if the page is a Group page and if yes take its first child page and emit an URL that has embedded the URL of the first child var temp = RouteHelper.GetFirstPageDataNode(psn, true); if (psn.NodeType == NodeType.Group && temp.Url != siteMap.CurrentNode.Url) { url = temp.Url; } else { var getUrlMethod = psn.GetType().GetMethod("GetUrl", BindingFlags.NonPublic | BindingFlags.Instance); url = getUrlMethod.Invoke(psn, new object[] { true, true }) as string; } } else { url = siteMap.CurrentNode.Url; } } if (string.IsNullOrEmpty(url)) { throw new ArgumentNullException("BaseUrl property could not be resolved."); } if (string.IsNullOrEmpty(this.FieldName)) { throw new ArgumentNullException("FieldName property could not be resolved."); } url = RouteHelper.ResolveUrl(url, UrlResolveOptions.Absolute); if (this.UrlEvaluationMode == Pages.Model.UrlEvaluationMode.UrlPath) { // Pages that are migrated from 3.7 have extensions (.aspx), which are unnecessary when we have segments after the page url. var getCurrentNodeExtensionMethod = typeof(PageHelper).GetMethod("GetCurrentNodeExtension", BindingFlags.NonPublic | BindingFlags.Static); string extension = getCurrentNodeExtensionMethod.Invoke(null, null) as string; if (!extension.IsNullOrEmpty() && url.EndsWith(extension)) { url = url.Substring(0, url.LastIndexOf(extension)); } } var evaluator = new TaxonomyEvaluator(); var taxonBuildOptions = TaxonBuildOptions.None; if (this.Taxonomy is Telerik.Sitefinity.Taxonomies.Model.HierarchicalTaxonomy) { taxonBuildOptions = TaxonBuildOptions.Hierarchical; } else if (this.Taxonomy is Telerik.Sitefinity.Taxonomies.Model.FlatTaxonomy) { taxonBuildOptions = TaxonBuildOptions.Flat; } var rootTaxonomy = this.Taxonomy.RootTaxonomy ?? this.Taxonomy; var evaluatedResult = evaluator.BuildUrl(rootTaxonomy.Name, taxonRelativeUrl, this.FieldName, taxonBuildOptions, this.UrlEvaluationMode, this.UrlKeyPrefix); return(string.Concat(url, evaluatedResult)); }