Based on my post from yesterday, here is my 5 minute 'quick stat' solution to the puzzle. Note, this is not thread safe and it will quickly destroy my server (most likely), but it works!
I added this to Application.cfm, at the bottom, before my last cfsetting.
<cffunction name="getCurrentURL" output="No" access="public" returnType="string">
<cfset var theURL = getPageContext().getRequest().GetRequestUrl().toString()>
<cfif len( CGI.query_string )><cfset theURL = theURL & "?" & CGI.query_string></cfif>
<cfreturn theURL>
</cffunction>
<cfset s = structGet("application.data")>
<cfset p = getCurrentURL()>
<cfif not structKeyExists(s, p)>
<cfset s[p] = 0>
</cfif>
<cfset s[p]++>
The UDF comes from CFLib of course. It handles both query string and path_info CGI variables so it works well on the blog.
To display it, I wrote this script:
<cfset sorted = structSort(application.data,"numeric","desc")>
<table width="100%" border="1" cellpadding="5">
<tr>
<th>Page</th>
<th>Count</th>
</tr>
<cfloop index="a" array="#sorted#">
<cfoutput>
<tr>
<td>#a#</td>
<td>#numberFormat(application.data[a])#</td>
</tr>
</cfoutput>
</cfloop>
</table>
Nothing too complex here outside of the cool structSort function which works perfectly for this example. If you are bored, you can see this in action here.