我正在尝试查看是否有办法在Application.cfc中的onRequestStart()和onRequestEnd()函数之间拆分CFSAVECONTENT标记,以将应用程序中任何.cfm页面的生成HTML保存到变量中。
不允许将<cfsavecontent variable="html">
添加到onRequestStart()并将</cfsavecontent>
添加到onRequestEnd(),因为必须在函数中关闭标记。
这甚至可以吗?我试图避免将CFSAVECONTENT硬编码到网站的每个.cfm页面。
谢谢!
答案 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引擎将再次输出生成的内容,最终会发送两个输出副本。
我已经使用这种方法对网站上的内容进行网站范围的更改,因为查找原始内容的每个实例都不够实用或不够及时。它还可以用于在返回给最终用户之前将生成的内容发送到翻译服务。