Coldfusion:在Application.cfc中的onRequestStart()和onRequestEnd()之间拆分标记

时间:2011-04-07 19:40:57

标签: coldfusion application.cfc

我正在尝试查看是否有办法在Application.cfc中的onRequestStart()和onRequestEnd()函数之间拆分CFSAVECONTENT标记,以将应用程序中任何.cfm页面的生成HTML保存到变量中。

不允许将<cfsavecontent variable="html">添加到onRequestStart()并将</cfsavecontent>添加到onRequestEnd(),因为必须在函数中关闭标记。

这甚至可以吗?我试图避免将CFSAVECONTENT硬编码到网站的每个.cfm页面。

谢谢!

2 个答案:

答案 0 :(得分:1)

亚历,

您可以在OnRequest中执行类似的操作(未经测试,但应该可以使用)。

<cffunction name="onRequest" returnType="void">
    <cfargument name="thePage" type="string" required="true">
    <cfsavecontent variable="html">
    <cfinclude template="#arguments.thePage#">
    </cfsavecontent>
    <!--- do whatever you want with the html variable here (for example, output it) --->
    <cfoutput>#html#</cfoutput>
</cffunction>

答案 1 :(得分:1)

我意识到这已经有了一个已经接受的答案,但是在不使用cfinclude的情况下实现此目的的另一种方法是使用onRequestEnd()中的getPageContext()对象来获取生成的内容:

<cffunction name="onRequestEnd" output="yes">
    <cfargument type="string" name="targetPage" required="true" />
    <cfset var html = getPageContext().getOut().getString() />
    <!--- Manipulate the html variable. --->
    <cfoutput>#html#</cfoutput><cfabort />
</cffunction>

<cfabort />在这里很重要,因为如果你不中止请求,CF引擎将再次输出生成的内容,最终会发送两个输出副本。

我已经使用这种方法对网站上的内容进行网站范围的更改,因为查找原始内容的每个实例都不够实用或不够及时。它还可以用于在返回给最终用户之前将生成的内容发送到翻译服务。