Ben Nadel
On User Experience (UX) Design, JavaScript, ColdFusion, Node.js, Life, and Love.
I am the chief technical officer at InVision App, Inc - a prototyping and collaboration platform for designers, built by designers. I also rock out in JavaScript and ColdFusion 24x7.
Meanwhile on Twitter
Loading latest tweet...
Ben Nadel at cf.Objective() 2011 (Minneapolis, MN) with:

CFSaveContent And THISTAG.GeneratedContent Tip

By Ben Nadel on
Tags: ColdFusion

Over the weekend, when I was working on my Dig Deep Fitness prototype, I thought of a neat little trick. I am sure that this has been done by many people, but it had never occurred to me. I was working with a ColdFusion custom tag in which I needed to replace the generated content of the tag. Normally, when I would do something of this nature, I would simply store the new content in a CFSaveContent tag buffer and then set that variable into the THISTAG.GeneratedContent variable:

  • <!---
  • We only want to execute this after the tag has
  • executed. That way, we will know all the child
  • tags and content that has been generated.
  • --->
  • <cfif (THISTAG.ExecutionMode EQ "End")>
  •  
  • <!--- Create the new tag content. --->
  • <cfsavecontent variable="VARIABLES.NewContent">
  • <cfoutput>
  •  
  • <!---
  • Put the new content in here that you want the
  • ColdFusion custom custom to actually produce.
  • --->
  •  
  • </cfoutput>
  • </cfsavecontent>
  •  
  •  
  • <!--- Set the tag's new content. --->
  • <cfset THISTAG.GeneratedContent = VARIABLES.NewContent />
  •  
  • </cfif>

But this weekend, as I was writing a tag like that, it hit me! Why not just store the CFSaveContent buffer directly into the GeneratedContent of the tag? Why bother even going through an intermediary variable:

  • <!---
  • We only want to execute this after the tag has
  • executed. That way, we will know all the child
  • tags and content that has been generated.
  • --->
  • <cfif (THISTAG.ExecutionMode EQ "End")>
  •  
  • <!--- Reset the tag content. --->
  • <cfsavecontent variable="THISTAG.GeneratedContent">
  • <cfoutput>
  •  
  • <!---
  • Put any content in here that you want the
  • ColdFusion custom custom to actually
  • produce. By storing the content diretly into
  • the GeneratedContent, it will set the output
  • that is displayed.
  • --->
  •  
  • </cfoutput>
  • </cfsavecontent>
  •  
  • </cfif>

Notice that the CFSaveContent tag is now storing its buffer directly into the THISTAG.GeneratedContent variable, which will, thereby, replace the content of the ColdFusion tag.

So, like I said, this is a really minor tip, but I think it has a big logical and visual impact on the layout of the ColdFusion custom tag. Thought I would share this with anyone who hadn't realized this shortcut yet.



Reader Comments

Apparently, you cannot change THISTAG.GeneratedContent when THISTAG.ExecutionMode EQ "start"

Reply to this Comment

@Ralph,

Correct - there is no generated content at that point since the body of the tag has not yet executed.

Reply to this Comment

How come when I try to use ThisTag.generatedContent it does not seem to want to work?

I have a tag called <sample1>..

Here is a test using it:

  • <cf_sample1>This is a Test</cf_sample1>

Here is the contents of the tag file:

  • <cfif (thistag.executionMode eq "end")>
  • <cfoutput><br>value=#thistag.generatedContent#</cfoutput>
  • </cfif>

I get value=
but no value at all!

Reply to this Comment

@Orville,

Found my own problem!

In my Application.cfm file I am using:

  • <cfsetting enablecfoutputonly="Yes">

So, in order for my custom tag to work as I would expect, I have to call it like so:

  • <cf_sample1><cfoutput>This is a Test</cfoutput></cf_sample1>

Then it works just fine!

Reply to this Comment

Post A Comment

You — Get Out Of My Dreams, Get Into My Comments
Live in the Now
Oops!
Comment Etiquette: Please do not post spam. Please keep the comments on-topic. Please do not post unrelated questions or large chunks of code. And, above all, please be nice to each other - we're trying to have a good conversation here.