コード例 #1
0
        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);
        }
コード例 #2
0
 public TaxonUrlEvaluatorAdapter()
 {
     this.taxonomyEvaluator = this.GetDefaultEvaluator();
 }
コード例 #3
0
 public TaxonUrlEvaluatorAdapter()
 {
     this.taxonomyEvaluator = this.GetDefaultEvaluator();
 }
コード例 #4
0
        /// <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));
        }