Exemplo n.º 1
0
 public void GetItemUrlCallsCurrentProvider(SwitchingLinkProvider sut, [Substitute] LinkProvider current, Item item, UrlOptions options)
 {
     using (new Switcher <LinkProvider>(current))
     {
         sut.GetItemUrl(item, options).Should().BeSameAs(current.GetItemUrl(item, options));
     }
 }
 public void SwitchLinkProvider([Substitute] LinkProvider provider,
                                Item item, [Modest] UrlOptions options)
 {
     provider.GetItemUrl(item, options).Returns("http://mysite.com/myitem");
     using (new Sitecore.FakeDb.Links.LinkProviderSwitcher(provider))
     {
         Assert.Equal("http://mysite.com/myitem", LinkManager.GetItemUrl(item, options));
     }
 }
 public static string GetUrl(this Item item, LinkProvider linkProvider, ItemUrlBuilderOptions urlBuilderOptions)
 {
     if (item.HasPresentationDetails())
     {
         //Ensure that the targetHostName attribute of Site Definition is set to host name of Content Delivery instance
         using (new SiteContextSwitcher(item.GetSiteContext()))
         {
             return(linkProvider.GetItemUrl(item, urlBuilderOptions));
         }
     }
     return(string.Empty);
 }
Exemplo n.º 4
0
        public static string GetWildcardItemUrl(Sitecore.Data.Items.Item wildcardItem, Item realItem, bool useDisplayName, UrlOptions urlOptions = null)
        {
            if (urlOptions == null)
            {
                urlOptions = UrlOptions.DefaultOptions;
            }

            urlOptions.AlwaysIncludeServerUrl = true;
            if (wildcardItem == null || realItem == null)
            {
                return(string.Empty);
            }

            var    scLinkProvider = new LinkProvider();
            string wildcardUrl    = scLinkProvider.GetItemUrl(wildcardItem, urlOptions);
            int    wildcardCount  = wildcardUrl.Split('/').Where(x => x == ",-w-,").Count();

            wildcardUrl = wildcardUrl.Replace(",-w-,", string.Empty);

            Uri            uri = new Uri(wildcardUrl);
            List <string>  wildcardItemPathParts = uri.AbsolutePath.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries).ToList();
            ReferenceField wildcardDatasource    = wildcardItem.Fields[Templates.WildCard.Fields.WildCardDatasourceField];

            if (wildcardDatasource != null)
            {
                List <string> realItemPathParts = new List <string>();
                if (realItem.Axes.GetAncestors().Any(a => a.ID == wildcardDatasource.TargetID))
                {
                    Item ancestor = realItem.Parent;
                    int  idx      = 1;
                    while (ancestor.ID != wildcardDatasource.TargetID && idx < wildcardCount)
                    {
                        idx++;
                        realItemPathParts.Insert(0, useDisplayName ? ancestor.DisplayName : ancestor.Name);
                        ancestor = ancestor.Parent;
                    }
                }

                string itemUrlName = useDisplayName ? realItem.DisplayName : realItem.Name;
                realItemPathParts.Add(itemUrlName);
                wildcardItemPathParts.AddRange(realItemPathParts);
            }

            UriBuilder uriBuilder = new UriBuilder {
                Scheme = uri.Scheme, Host = uri.Host, Port = uri.Port, Path = string.Join("/", wildcardItemPathParts)
            };

            return(uriBuilder.Uri.ToString());
        }
		public void ExpandLinks(ref string text, LinkProvider provider, UrlOptions options)
		{
			Assert.ArgumentNotNull(text, "text");
			Assert.ArgumentNotNull(options, "urlOptions");
			var linkStart = text.IndexOf("~/link.aspx?", StringComparison.InvariantCulture);
			if (linkStart == -1)
			{
				return;
			}

			var builder = new StringBuilder(text.Length);
			var linkEnd = 0;

			for (; linkStart >= 0; linkStart = text.IndexOf("~/link.aspx?", linkEnd, StringComparison.InvariantCulture))
			{
				var num = text.IndexOf("_z=z", linkStart, StringComparison.InvariantCulture);
				if (num < 0)
				{
					text = builder.ToString();
					return;
				}

				var dynamicLink = DynamicLink.Parse(text.Substring(linkStart, num - linkStart));

				var item = GetItem(dynamicLink);
				var url = "#";
				if (item != null)
				{
					url = provider.GetItemUrl(GetItem(dynamicLink), options);
				}
				var str = text.Substring(linkEnd, linkStart - linkEnd);
				builder.Append(str);
				builder.Append(url);
				linkEnd = num + "_z=z".Length;
			}

			builder.Append(text.Substring(linkEnd));
			text = builder.ToString();
		}
        public static string GetWildcardItemUrl(Sitecore.Data.Items.Item wildcardItem, Item realItem, bool useDisplayName, UrlOptions urlOptions = null)
        {
            if (urlOptions == null)
            {
                urlOptions = UrlOptions.DefaultOptions;
            }

            urlOptions.AlwaysIncludeServerUrl = true;
            if (wildcardItem == null || realItem == null)
            {
                return string.Empty;
            }

            var scLinkProvider = new LinkProvider();
            string wildcardUrl = scLinkProvider.GetItemUrl(wildcardItem, urlOptions);
            int wildcardCount = wildcardUrl.Split('/').Where(x => x == ",-w-,").Count();
            wildcardUrl = wildcardUrl.Replace(",-w-,", string.Empty);

            Uri uri = new Uri(wildcardUrl);
            List<string> wildcardItemPathParts = uri.AbsolutePath.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries).ToList();
            ReferenceField wildcardDatasource = wildcardItem.Fields[AppConstants.WildcardDatasourceField];
            if (wildcardDatasource != null)
            {
                List<string> realItemPathParts = new List<string>();
                if (realItem.Axes.GetAncestors().Any(a => a.ID == wildcardDatasource.TargetID))
                {
                    Item ancestor = realItem.Parent;
                    int idx = 1;
                    while (ancestor.ID != wildcardDatasource.TargetID && idx < wildcardCount)
                    {
                        idx++;
                        realItemPathParts.Insert(0, useDisplayName ? ancestor.DisplayName : ancestor.Name);
                        ancestor = ancestor.Parent;
                    }
                }

                string itemUrlName = useDisplayName ? realItem.DisplayName : realItem.Name;
                realItemPathParts.Add(itemUrlName);
                wildcardItemPathParts.AddRange(realItemPathParts);
            }

            UriBuilder uriBuilder = new UriBuilder { Scheme = uri.Scheme, Host = uri.Host, Port = uri.Port, Path = string.Join("/", wildcardItemPathParts) };
            return uriBuilder.Uri.ToString();
        }