public void Process(SitemapItemLinkArgs args) { Assert.ArgumentNotNull(args, nameof(args)); using (new SiteContextSwitcher(args.CustomItem.SiteContext)) using (new LanguageSwitcher(args.CustomItem.Item.Language)) { var urlOptions = LinkManager.GetDefaultUrlOptions(); urlOptions.AlwaysIncludeServerUrl = true; args.Link = LinkManager.GetItemUrl(args.CustomItem.Item, urlOptions); } }
private static List <Link> BuildAlternates(IEnumerable <SitemapItem> alternates, SitemapSiteArgs sitemapSiteArgs) { var links = new List <Link>(); foreach (var alternate in alternates) { var sitemapItemLinkArgs = new SitemapItemLinkArgs(alternate); CorePipeline.Run("sitemap.GetItemLink", sitemapItemLinkArgs); if (string.IsNullOrWhiteSpace(sitemapItemLinkArgs.Link)) { Logger.Warn( $"Unable to determine link for item: {alternate.Item.Paths.Path} and site: {sitemapSiteArgs.SiteContext.Name}"); continue; } var customLang = sitemapSiteArgs.SitemapLanguages.FirstOrDefault(i => string.Equals(i.Language.Name, alternate.Item.Language.Name, StringComparison.InvariantCultureIgnoreCase)); if (customLang == null) { Logger.Warn( $"Unable to find CustomLanguage for item: {alternate.Item.Paths.Path}, language: {alternate.Item.Language.Name}, site: {sitemapSiteArgs.SiteContext.Name}"); continue; } links.Add(new Link() { Href = sitemapItemLinkArgs.Link, Hreflang = customLang.HrefLang, Rel = "alternate", Item = alternate.Item }); } return(links); }