CFInclude Templates Are Parsed Regardless Of File Type

Posted September 8, 2006 at 8:46 AM

Tags: ColdFusion

This is in response to James who said that ColdFusion CFInclude tags will only parse files if they have appropriate extensions (such as .cfm). This is to demonstrate that that is incorrect. CFInclude will parse any file looking for ColdFusion tags. James argued that a CSS file would throw errors when it encountered HEX color values starting with # signs. What he is confused about is that # are only evaluated inside ColdFusion tags or CFOutput tags.

To demonstrate this (and my point about using the Include() method of the page context), I am setting up a simple page and an included CSS file. The CSS file has ColdFusion code on it that will randomly change the background image of the body tag.

Here is the css file:

 Launch code in new window » Download code as text file »

  • <!--- Create array of background images. --->
  • <cfset arrImages = ListToArray(
  • "http://static.flickr.com/87/234968608_4ea0e7acd4.jpg?v=0
  • http://static.flickr.com/89/234088556_33aef45615.jpg?v=0
  • http://static.flickr.com/71/204064957_cb9ae3892a.jpg?v=0
  • http://static.flickr.com/66/203414399_365e7f3c0f.jpg?v=0
  • http://static.flickr.com/27/44228284_659a202c75.jpg?v=0
  • http://static.flickr.com/78/222477508_683586fe13.jpg?v=0
  • http://static.flickr.com/61/234025928_14b1e2451e.jpg?v=0
  • http://static.flickr.com/61/225523900_c3de2ad93d.jpg?v=0",
  • " #Chr( 13 )##Chr( 10 )#"
  • ) />
  •  
  • #body {
  • background-image: url(
  • "<cfset WriteOutput( arrImages[ RandRange( 1, 8 ) ] ) />"
  • ) ;
  • font: 12px verdana ;
  • margin: 30px 30px 30px 30px ;
  • }
  •  
  • #text {
  • background-color: #666666 ;
  • border: 2px solid #AAAAAA ;
  • color: #F0F0F0 ;
  • padding: 10px 10px 10px 10px ;
  • }

As you can see, we create an array of images. Then, in the body tag, we execute the CFSet tag and the WriteOutput() method to dynamically set the body background image. And, just to exhaust the error-producing possibilities, I have used ID selectors (#) and colors to demonstrate that # signs will NOT throw errors.

Then, I have two main files. One uses the CFInclude tag to demonstrate the parsing of the CSS file and one that uses the GetPageContext().Include() method to demonstrate that it will not parse the CSS file:

 Launch code in new window » Download code as text file »

  • <html>
  • <head>
  • <title>CFInclude Parsing Test</title>
  • <style type="text/css">
  • <!--- Include the CSS file via CFInclude. --->
  • <cfinclude template="styles.css" />
  • </style>
  • </head>
  • <body id="body">
  •  
  • <div id="text">
  • <h1>
  • This check to see if a CSS file will be parsed if included
  • via the CFInclude ColdFusion Tag.
  • </h1>
  •  
  • <p>
  • If the CSS file IS parsed, the body should have a
  • randomized background image on page refresh.
  • </p>
  • </div>
  •  
  • </body>
  • </html>

The one that uses the page context differs ONLY in the include statement:

 Launch code in new window » Download code as text file »

  • <!--- Include the CSS file via page context. --->
  • <cfset GetPageContext().Include( "styles.css" ) />

To see these at work, check out the two demos:

Using CFInclude Tag

http://www.bennadel.com/resources/demo/1/index.cfm

Using GetPageContext().Include()

http://www.bennadel.com/resources/demo/1/index2.cfm

On the second demo, view the page source to see that the Include() method actually includes the ColdFusion tag without executing it.

Download Code Snippet ZIP File

Post Comment  |  Ask Ben  |  Other Searches  |  Print Page



Learning ColdFusion 9 - ColdFusion 9 tutorials, samples, examples, demos

Reader Comments

Sep 8, 2006 at 12:18 PM // reply »
6 Comments

Good post - simple, clean and to the point! Also, I thought I'd let you know that code samples are coming through as PRE tags, at least in Bloglines.

One compliant -- the choice of images for the sample is a tad bit NSFW.


Sep 8, 2006 at 12:23 PM // reply »
7,572 Comments

Demain,

Thanks for the comment and for the confirmation of PRE tags in Blog lines.

As for the images. I agree. I write a lot of this stuff early in the morning and my judgement is not that great. I will tone it back significantly. My appologies.


Sep 8, 2006 at 12:25 PM // reply »
6 Comments

Oh, don't get me wrong - I personaly don't have a problem seeing beautiful women - it just might be a bit hard to explain if the wrong person walked by my cube while I was, ummm, testing your sample code. ;-)


Sep 8, 2006 at 12:29 PM // reply »
7,572 Comments

I'll be honest... you're not the first person to mention it ;) I want to have fun, but at the same time, I don't want to exclude anyone, cause ColdFusion rocks hardcore and no one should be uncomfortable in any learning environment. As a solution, I will stick to ladies ('cause it's just fun) but no "questionable" photos. Just good, clean fun.


Sep 9, 2006 at 4:27 AM // reply »
4 Comments

Just gotta say Ben that I found your site a few days ago and am addicted to the way you code and the context in which you explain it all. Certainly makes learning much easier ;)


Sep 9, 2006 at 7:20 AM // reply »
7,572 Comments

David,

I really appreciate that :D All I want to do it learn and share the knowledge. I couldn't be happier that you are into the way I code and explain things. Please let me know if you ever want me to whip up an example for something or help out with a problem that needs to be solved.

Thanks again!


su
Jan 16, 2007 at 11:29 AM // reply »
3 Comments

Is there a coldfusion tag to import html content from external site.

similar to jstl tag <c:import url="${param.url}"/>

I am getting an error on <cfset pc = GetPageContext()>. Does this mean I am using an old version of coldfusion.

Thanks


Jan 16, 2007 at 12:18 PM // reply »
7,572 Comments

Su,

I don't know of any way to import from a remote server, but it might be possible somehow.

If GetPageContext() is breaking then you might be using a pre-MX version of ColdFusion. It was introduced in MX 6 I believe.


Mar 27, 2009 at 7:30 AM // reply »
2 Comments

Hi Ben,

I have the same doubt that su,
Is there any way to import external html into our coldfusion application, like a header or footer?

Thanks in advance.

Best Regards.


Post Comment  |  Ask Ben

Recent Blog Comments
Mar 19, 2010 at 7:26 PM
MySQL 3/4 - com.mysql.jdbc.Driver And allowMultiQueries=true
Thank you very much for this post. Adding allowMultiQueries="true" in context.xml didn't help until I added it to url as allowMultiQueries=true Good idea is to use prepared statements and it will he ... read »
Jim
Mar 19, 2010 at 4:49 PM
Nobody Puts Baby In The Corner!
Wow. This is like suddenly finding a support group for your secret shame. I'm not alone! I always liked this movie, even though it is extremely cheesy. I just wish Jennifer Grey hadn't gotten the ... read »
Mar 19, 2010 at 4:47 PM
Application.cfc OnRequest() Method Affects OnError() Arguments
@Jason and @Ben, I've been doing some CF9 refactoring on our systems and noticed an odd occurrence with onError as well. Found a way to work around my problem, but what I saw was... Background: Our ... read »
Jim
Mar 19, 2010 at 4:44 PM
Shoot 'Em Up Starring Clive Owen And Paul Giamatti
I actually enjoyed this movie quite a lot. It was different, certainly, but I think they were going for more of a Quentin Tarentino-"wow, that was weird"-vibe than an actual spoof. Once I realize ... read »
Mar 19, 2010 at 4:34 PM
An Intensive Exploration Of jQuery With Ben Nadel (Video Presentation)
Hey I guess the video is down. Is there anyway you can upload to youtube or vimeo or some other service? Greatly appreciated. ... read »
Mar 19, 2010 at 4:24 PM
ColdFusion CFPOP - My First Look
@Ben Thanks for the follow up! The root of the problem had to do with being able to trace bounced emails to specific records in a DB table. Let's say you run an email campaign and you get 1,000 bou ... read »
Mar 19, 2010 at 4:15 PM
SQL COUNT( NULLIF( .. ) ) Is Totally Awesome
Thank you Ben and Tony! Either of these work for the summary report I am working on and the info is much appreciated! I think I like Tony's a little better because I won't have to educate every ... read »
Mar 19, 2010 at 3:35 PM
ColdFusion Path Usage And Manipulation Overview
@Ben, Sorry. Clarification. expandpath worked for me in application.cfc, but not in other templates. ... read »