コード例 #1
0
        public void ProcessRequest(HttpContext context)
        {
            var args = new GetSitemapXmlEntriesArgs
            {
                HttpContext = context
            };

            CorePipeline.Run("elision.getSitemapXmlEntries", args);

            args.HttpContext.Response.Headers.Add("X-Sitemap-Index-Used", args.IndexName.Or("None"));
            args.HttpContext.Response.Headers.Add("X-Sitemap-Root-Item", args.SitemapRootItem?.Paths?.FullPath?.Or(null) ?? "None");
            args.HttpContext.Response.Headers.Add("X-Sitemap-Site", args.Site?.Name ?? "None");

            if (!args.Entries.Any() && (args.Site == null || args.SitemapRootItem == null || string.IsNullOrWhiteSpace(args.IndexName)))
            {
                context.Response.StatusCode = 404;
                Sitecore.Diagnostics.Log.Warn("Something went wrong getting sitemap - returning 404.", this);
                return;
            }

            context.Response.ContentType = "text/xml";
            context.Response.Write("<?xml version=\"1.0\" encoding=\"utf-8\"?>" + Environment.NewLine +
                                   "<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">" + Environment.NewLine);

            var sb = new StringBuilder();

            foreach (var node in args.Entries)
            {
                sb.Append("<url>")
                .AppendFormat("<loc>{0}</loc>", XmlEscapeString(node.Location))
                .AppendFormat("<lastmod>{0:yyyy-MM-dd}</lastmod>", node.LastModified);

                if (node.ChangeFrequency != PageUpdateFrequency.Unknown)
                {
                    sb.AppendFormat("<changefreq>{0}</changefreq>", node.ChangeFrequency.ToString().ToLowerInvariant());
                }

                if (node.Priority >= 0 && node.Priority <= 1.0)
                {
                    sb.AppendFormat("<priority>{0:0.0}</priority>", node.Priority);
                }

                sb.Append("</url>" + Environment.NewLine);
                context.Response.Write(sb.ToString());
                sb.Clear();
            }
            context.Response.Write("</urlset>");
        }
コード例 #2
0
        public void Process(GetSitemapXmlEntriesArgs args)
        {
            args.IndexName = null;
            args.Site      = Sitecore.Sites.SiteContextFactory.GetSiteContext(Sitecore.Web.WebUtil.GetRequestUri().Host,
                                                                              args.HttpContext.Request.FilePath.ToLowerInvariant(), args.HttpContext.Request.Url.Port)?.SiteInfo;

            if (args.Site == null || (args.Site.Port > 0 && args.Site.Port != args.HttpContext.Request.Url.Port))
            {
                Sitecore.Diagnostics.Log.Error("Error getting sitemap - could not resolve site.", this);
                return;
            }


            Sitecore.Context.SetActiveSite(args.Site.Name);

            args.SitemapRootItem = Sitecore.Context.Database.GetItem(args.Site.RootPath + args.Site.StartItem);
            args.Language        = Sitecore.Context.Language;
        }