Hi,
One of the things that I haven't liked when users create dmHTML
objects is the hard-coding of image URLs within the body.
Others may have developed workarounds, but I was looking at Ben
Nadel's blog the other day and he was taking about a simple method to
log file downloads in CF [1]. I thought the method he described would
be a good way to 'solve' the hard-coding issue. To this end, I've have
created a proxy.cfm template (this can go in your webroot folder) and
an example dmImage inserthtml snippet [2]. (These files have been
created for, and testing, on FarCry 4 but they wouldn't need too much
change to work with a FarCry 3 setup).
Firstly the inserthtml. It's pretty basic as it just replaces the
img's src with a call to proxy.cfm?objectid=<the image's UUID> instead
of the image's URL path. Yyou can also supply the (optional) imagesize
param. ie proxy.cfm?objectid=<the image's UUID>&imagesize=<thumb,
optimised or original>)
ie:
<!--- @@displayname: Link (via proxy) --->
<cfoutput><img alt='#stObj.alt#' title='#stObj.alt#'
src="#application.url.webroot#/proxy.cfm?objectid=#stObj.objectid#" /
></cfoutput>
Secondly, the proxy.cfm templateiso only marginally more complex. It
just takes the objected and (optional) imagesize (via the URL), gets
the FarCry object and cflocations to the current image URL. This
allows users to update the physical image (and location and filename)
associated with a FarCry dmImage object and the links within the
dmHTML bodys do not need to be changed.
The good thing about using the cflocation method is that the image
will also shows up in the rich text editor when users are editing the
dmHTML objects!
(Although this does need to do a database lookup it you turn on FarCry
4's objectbroker for the image type this should cut down the amount of
db traffic.)
The code for proxy.cfm looks like:
<cfsetting enablecfoutputonly="true" />
<cfparam name="URL.objectid" type="string" default="" />
<cfparam name="URL.ImageSize" type="string" default="optimised" />
<cfif len(trim(URL.objectid))>
<cfset oImage = createObject("component",
"#application.types.dmImage.typePath#")>
<cfset imagePath = oImage.getURLImagePath(URL.objectid,
URL.ImageSize) />
<cfif len(trim(imagePath))>
<cflocation url="#imagePath#" addtoken="false" />
<cfelse>
<cfoutput>image not found</cfoutput>
<!--- trace or report this error --->
</cfif>
<cfelse>
<cfoutput>Must supply object id</cfoutput>
<!--- trace or report this error --->
</cfif>
In summary, this looks like a good solution to the problem.
Questions/comments/suggestions?
(I've tested this on Windows/IIS but I don't see issues with other
setups)
Cheers
David
[1] http://www.bennadel.com/index.cfm?dax=blog:706.view
[2]
http://docs.farcrycms.org:8080/confluence/display/FCDEV30/Insert+HTML+Templates
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"farcry-dev" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/farcry-dev?hl=en
-~----------~----~----~----~------~----~------~--~---