Exemple #1
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);
        }
Exemple #2
0
        private static MvcHtmlString CreateHtmlString(AlternativeLinkViewModel model)
        {
            var sb = new StringBuilder();

            foreach (var alternate in model.Alternates)
            {
                sb.AppendLine("<link rel=\"alternate\" href=\"" + alternate.Url + "\" hreflang=\"" + alternate.Culture.ToLower() +
                              "\" />");
            }

            if (!string.IsNullOrEmpty(model.XDefaultUrl))
            {
                sb.AppendLine(" <link rel=\"alternate\" href=\"" + model.XDefaultUrl + "\" hreflang=\"x-default\" />");
            }

            return(MvcHtmlString.Create(sb.ToString()));
        }