1

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

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

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

谢谢!

4

2 回答 2

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 引擎将再次输出生成的内容,并最终发送输出的两个副本。

我已经使用这种方法将站点范围内的更改应用于站点上的内容,因为此时查找原始内容的每个实例都不实用或不够及时。如果需要,它还可用于将生成的内容发送给翻译服务,然后再返回给最终用户。

于 2011-04-17T06:14:21.347 回答
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>
于 2011-04-07T20:31:59.180 回答