This week I added support for Google Sitemaps to my blog. While this isn't in the core BlogCFC install yet, I thought I'd share the code in case others wanted to do it. Right now I've just created a new CFM and dropped the code in there. I will most likely move the generation to a CFC method later on. Also note that I was unable to get the sitemap to verify until I "tricked" google. My file name was, let's say, sitemap.cfm. This refused to validate. I saved the output of my file as test.xml, and that validated immidiately. I hunted around and found a few people who asked if the extension would cause problems for Google. On a whim, I resubmitted by sitemap with this url: http://ray.camdenfamily.com/sitemap.cfm?ext=xml. (Not the real URL.) This was enough to "fool" Google and allow my sitemap to validate. The code is below.
Note - the code belows has MY url in it. You would obviously want to change that. The "real" code in 4.0 won't require that.
<cfprocessingdirective pageencoding="utf-8">
<cfset params = structNew()>
<!--- Should be good for a while.... --->
<cfset params.maxEntries = 99999>
<cfset params.mode = "short">
<cfset entries = application.blog.getEntries(params)>
<cfset z = getTimeZoneInfo()>
<cfif not find("-", z.utcHourOffset)>
<cfset utcPrefix = "-">
<cfelse>
<cfset z.utcHourOffset = right(z.utcHourOffset, len(z.utcHourOffset) -1 )>
<cfset utcPrefix = "+">
</cfif>
<cfset dateStr = dateFormat(entries.posted[1],"yyyy-mm-dd")>
<cfset dateStr = dateStr & "T" & timeFormat(entries.posted[1],"HH:mm:ss") & utcPrefix & numberFormat(z.utcHourOffset,"00") & ":00">
<cfcontent type="text/xml"><cfoutput><?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.google.com/schemas/sitemap/0.84">
<url>
<loc>http://ray.camdenfamily.com/</loc>
<lastmod>#dateStr#</lastmod>
<changefreq>hourly</changefreq>
<priority>0.8</priority>
</url>
</cfoutput>
<cfoutput query="entries">
<cfset dateStr = dateFormat(posted,"yyyy-mm-dd")>
<cfset dateStr = dateStr & "T" & timeFormat(posted,"HH:mm:ss") & utcPrefix & numberFormat(z.utcHourOffset,"00") & ":00">
<url>
<loc>#xmlFormat(application.blog.makeLink(id))#</loc>
<lastmod>#dateStr#</lastmod>
</url>
</cfoutput>
<cfoutput>
</urlset>
</cfoutput>