public virtual void Process(GenerateSitemapArgs args) { var sitemap = new StringBuilder(); var items = args.Items.ToList(); for (var i = 0; i < items.Count; i++) { var item = items[i]; var itemXml = BuildUrlNode(item); if ((i > 0 && (i % 50000) == 0) || //sitemap file cannot contain more than 50,000 urls (sitemap.Length + itemXml.Length) > 2097152 //sitemap file cannot be larger than 10MB, each UTF-8 character could be as many as 6 bytes -- this comparison is the lazy way to accomplish this ) { sitemap.Append(BuildSitemapFileFooter()); args.SitemapFiles.Add(sitemap.ToString()); sitemap = new StringBuilder(); sitemap.Append(BuildSitemapFileHeader()); } sitemap.Append(itemXml); } if (args.SitemapFiles.Count > 1) { args.SitemapFiles.Insert(0, BuildSitemapIndexFile(args)); } }
public void Process(GenerateSitemapArgs args) { if (args.RootItem == null) { args.RootItem = SiteContext.GetHomeItem(); } }
public void Process(GenerateSitemapArgs args) { var match = SitemapUrlRegex.Match(args.RequestUrl); if (match.Success) { args.CacheKeyBase = match.Groups["base"].Value + match.Groups["extension"].Value; } }
public void Process(GenerateSitemapArgs args) { if (string.IsNullOrWhiteSpace(args.CacheKeyBase)) { return; } var sitemap = SitemapXmlCache.Current.Get(args.CacheKeyBase); if (sitemap != null) { args.Content = sitemap.Content; } }
public void Process(GenerateSitemapArgs args) { if (args.SitemapFiles == null || !args.SitemapFiles.Any()) { return; } for (var i = 0; i < args.SitemapFiles.Count; i++) { if (i == 0) { SitemapXmlCache.Current.Set(args.CacheKeyBase, new SitemapXmlFile(args.SitemapFiles[i])); } else { SitemapXmlCache.Current.Set(args.CacheKeyBase + "_" + i, new SitemapXmlFile(args.SitemapFiles[i])); } } }
protected virtual string BuildSitemapIndexFile(GenerateSitemapArgs args) { var contents = new StringBuilder(); contents.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n" + "<sitemapindex xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\r\n"); for (var i = 0; i < args.SitemapFiles.Count; i++) { var filename = args.CacheKeyBase + "_" + i + ".xml"; contents.AppendFormat( "\t<sitemap><loc>{0}</loc><lastmod>{1:yyyy-MM-ddTHH:mm:ss+00:00}</lastmod></sitemap>\r\n", filename, DateTime.UtcNow ); } contents.Append("</sitemapindex>"); return(contents.ToString()); }
public void Process(GenerateSitemapArgs args) { args.Items = new[] { args.RootItem }.Union(args.RootItem.Axes.GetDescendants()); }