Coldfusion:在 Application.cfc 中将标签拆分为 onRequestStart() 和 onRequestEnd()

发布于 2024-10-31 05:22:25 字数 346 浏览 1 评论 0原文

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

不允许将 添加到 onRequestStart() 并将 添加到 onRequestEnd(),因为标签必须关闭在函数中。

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

谢谢!

I'm trying to see if there is a way to split a CFSAVECONTENT tag across the onRequestStart() and onRequestEnd() functions in Application.cfc to save the generated HTML of any .cfm page in the application to a variable.

Adding <cfsavecontent variable="html"> to onRequestStart() and adding </cfsavecontent> to onRequestEnd() isn't allowed since the tag must be closed in the function.

Is this even possible to do? I'm trying to avoid hard coding the CFSAVECONTENT this into every .cfm page of the site.

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

轻许诺言 2024-11-07 05:22:25

亚历克斯,

你可以在 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>

Alex,

You could do something like this in OnRequest (untested, but should work).

<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>
贱贱哒 2024-11-07 05:22:25

我意识到这已经有了一个可接受的答案,但在不使用 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>

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

我曾使用此方法对网站上的内容应用站点范围的更改,但在紧急情况下查找原始内容的每个实例并不实际或不够及时。如果需要,它还可用于将生成的内容发送到翻译服务,然后再返回给最终用户。

I realize this has an accepted answer already, but another way to accomplish this without using cfinclude would be to use the getPageContext() object in onRequestEnd() to nab the generated content:

<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>

The <cfabort /> is important here because if you don't abort the request, the CF engine will output the generated content again and it will end up sending two copies of the output along.

I've used this method to apply site-wide changes to content on sites in a crunch where finding every instance of the original content wasn't practical or timely enough. It can also be used to send the generated content out to a translation service if needed before being returned to the end-user.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文