private static void GetAlternativePageLink(ContentReference contentReference, IList <LanguageBranch> languages, List <AlternativePageLink> alternates) { var contentRepository = ServiceLocator.Current.GetInstance <IContentRepository>(); var page = contentRepository.Get <IContent>(contentReference) as PageData; if (page == null) { return; } var pageLanguages = contentRepository.GetLanguageBranches <PageData>(page.ContentLink); var urlService = ServiceLocator.Current.GetInstance <IUrlService>(); var pagesData = pageLanguages as IList <PageData> ?? pageLanguages.ToList(); foreach (var language in languages) { foreach (var p in pagesData) { if (string.Equals(p.LanguageBranch.ToLower(), language.LanguageID.ToLower(), StringComparison.Ordinal)) { var url = urlService.GetExternalFriendlyUrl(page.ContentLink, p.LanguageBranch); var alternate = new AlternativePageLink(url, language.LanguageID); alternates.Add(alternate); break; } } } }
public static MvcHtmlString GetAlternateLinks(this ContentReference contentReference) { if (!ProcessRequest) { return(MvcHtmlString.Create("")); } var alternates = new List <AlternativePageLink>(); var languages = ServiceLocator.Current.GetInstance <ILanguageBranchRepository>().ListEnabled(); GetAlternativePageLink(contentReference, languages, alternates); var masterLanguage = languages.FirstOrDefault(l => l.ID == 1) ?? languages.FirstOrDefault(); var xDefault = alternates.FirstOrDefault(a => string.Equals(a.Culture.ToLower(), masterLanguage?.LanguageID.ToLower())); var siteLanguageList = languages.Select(language => language.LanguageID).ToList(); #region For fallback language page links foreach (var link in alternates) { if (siteLanguageList.Contains(link.Culture)) { siteLanguageList.Remove(link.Culture); } } foreach (var language in siteLanguageList) { if (xDefault != null && language != null) { var fallbackLanguages = ContentLanguageSettingsHandler.Instance.GetFallbackLanguages(contentReference, language); if (fallbackLanguages.Any() && fallbackLanguages.Contains(masterLanguage?.LanguageID)) { var url = xDefault.Url.Replace("/" + masterLanguage?.LanguageID.ToLower() + "/", "/" + language + "/"); var alternate = new AlternativePageLink(url, language); alternates.Add(alternate); } } } #endregion var model = new AlternativeLinkViewModel(alternates); if (!string.IsNullOrEmpty(xDefault?.Url)) { model.XDefaultUrl = xDefault.Url; } var htmlString = CreateHtmlString(model); return(htmlString); }