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));
            }
        }
Ejemplo n.º 2
0
 public void Process(GenerateSitemapArgs args)
 {
     if (args.RootItem == null)
     {
         args.RootItem = SiteContext.GetHomeItem();
     }
 }
Ejemplo n.º 3
0
        public void Process(GenerateSitemapArgs args)
        {
            var match = SitemapUrlRegex.Match(args.RequestUrl);

            if (match.Success)
            {
                args.CacheKeyBase = match.Groups["base"].Value + match.Groups["extension"].Value;
            }
        }
Ejemplo n.º 4
0
        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());
        }
Ejemplo n.º 7
0
 public void Process(GenerateSitemapArgs args)
 {
     args.Items = new[] { args.RootItem }.Union(args.RootItem.Axes.GetDescendants());
 }