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); }
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(); }