Beispiel #1
0
        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;
                    }
                }
            }
        }
Beispiel #2
0
        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);
        }