Barney,

>Is there a way to, in the opening tag of a custom tag, tell the custom
>tag to skip evaluation of it's body?
>
><p:mytag>
>  i don't want to do this
></p:mytag>
>
>mytag.cfm:
><cfif this.executionMode EQ "start">
>  <cfexit method="goToJustAfterClosingTag" />
></cfif>

You should be able to do cancel the entire request:
<cfif this.executionMode EQ "start">
  <cfexit method="exitTag" />
</cfif>

I wrote a cf_CacheObject tag a long time ago which I used to cache a bunch
of code that really CPU intensive. Here's the code (please forgive the
uppercase--I wrote the code 4 years and a week ago):

<CFSETTING ENABLECFOUTPUTONLY="NO">
<!--------------------------------------------------------------------------
---
 Name:    CF_CacheObject
 Author:  Dan G.Switzer, II <[EMAIL PROTECTED]>
 Company: PengoWorks.com
 Date:    August 17, 2001
 Build:   100

 Description:
 This tag will is used to cache an object and/or partial content on a page. 
 The object can be any valid ColdFusion variable that will be available
 by the time the end tag runs. This is extremely useful for caching objects
 that take a lot of process to generate, but in which the output of the
 object may change. You'll need to have access to the "Application" scope.
 
 Attributes:
 Action       - The action you'd like to perform. Valid options are "Cache"
                and "Clear". (Required)
 Object       - The object to cache. (Optional)
 CachedWithin - The timespan to cache the object. Defaults to 30 minutes.
                Uses the CreateTimeSpan function. (Optional)
----------------------------------------------------------------------------
-->
<!---// set default attributes //--->
<CFPARAM NAME="Attributes.Action" TYPE="String" DEFAULT="Cache">
<CFPARAM NAME="Attributes.Object" TYPE="String" DEFAULT="">
<CFPARAM NAME="Attributes.CachedWithin" TYPE="Numeric"
DEFAULT="#CreateTimeSpan(0, 0, 30, 0)#">

<!---// define local variables //--->
<CFSET sHashKey = CGI.SCRIPT_NAME>

<!---// lock all calls to tag, to prevent any errors //--->
<CFLOCK TIMEOUT="60" THROWONTIMEOUT="No" NAME="cfCacheObject"
TYPE="EXCLUSIVE">
        <CFIF NOT IsDefined("Application.cfCacheObject")>
                <CFSET Application.cfCacheObject = StructNew()>
        </CFIF>
        <CFIF NOT StructKeyExists(Application.cfCacheObject, sHashKey) OR
NOT CompareNoCase(Attributes.ACTION, "Clear")>
                <CFSET Application.cfCacheObject[sHashKey] = StructNew()>
                <CFSET Application.cfCacheObject[sHashKey].GeneratedContent
= "">
                <CFSET Application.cfCacheObject[sHashKey].Object = "">
                <CFSET Application.cfCacheObject[sHashKey].LastUpdated =
Now()>
                <CFSET Application.cfCacheObject[sHashKey].Expires =
Application.cfCacheObject[sHashKey].LastUpdated>
        </CFIF>
</CFLOCK>

<CFSWITCH EXPRESSION="#Lcase(ThisTag.ExecutionMode)#">
        <CFCASE VALUE="start">
                <!---// if the object hasn't expired, then grab the cache
//--->
                <CFIF DateCompare(Now(),
Application.cfCacheObject[sHashKey].Expires) EQ -1>
                        <CFSET isExpired = False>
                        <CFIF NOT Len(Attributes.Object)>
                                <CFSET SetVariable("Caller." &
Attributes.Object, Application.cfCacheObject[sHashKey].Object)>
                        </CFIF>
        
<CFOUTPUT>#Application.cfCacheObject[sHashKey].GeneratedContent#</CFOUTPUT>
                        <CFEXIT METHOD="EXITTAG">
                <!---// if the object has expired, the process on end tag
//--->
                <CFELSE>
                        <CFSET isExpired = True>
                </CFIF>
        </CFCASE>
        <CFCASE VALUE="end">
                <CFSET Application.cfCacheObject[sHashKey].GeneratedContent
= ThisTag.GeneratedContent>
                <CFIF NOT Len(Attributes.Object)>
                        <CFSET Application.cfCacheObject[sHashKey].Object =
Duplicate(Evaluate("Caller." & Attributes.Object))>
                <CFELSE>
                        <CFSET Application.cfCacheObject[sHashKey].Object =
"">
                </CFIF>
                <CFSET Application.cfCacheObject[sHashKey].LastUpdated =
Now()>
                <CFSET Application.cfCacheObject[sHashKey].Expires =
CreateODBCDateTime(Application.cfCacheObject[sHashKey].LastUpdated +
Attributes.CachedWithin)>
        </CFCASE>
</CFSWITCH>

<CFSETTING ENABLECFOUTPUTONLY="NO">



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
Logware (www.logware.us): a new and convenient web-based time tracking 
application. Start tracking and documenting hours spent on a project or with a 
client with Logware today. Try it for free with a 15 day trial account.
http://www.houseoffusion.com/banners/view.cfm?bannerid=67

Message: http://www.houseoffusion.com/lists.cfm/link=i:4:216295
Archives: http://www.houseoffusion.com/cf_lists/threads.cfm/4
Subscription: http://www.houseoffusion.com/lists.cfm/link=s:4
Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=89.70.4
Donations & Support: http://www.houseoffusion.com/tiny.cfm/54

Reply via email to