Coldfusion: разделение тега по onRequestStart () и onRequestEnd () в Application.cfc - PullRequest
1 голос
/ 07 апреля 2011

Я пытаюсь выяснить, есть ли способ разделить тег CFSAVECONTENT между функциями onRequestStart () и onRequestEnd () в Application.cfc, чтобы сохранить сгенерированный HTML-код любой страницы .cfm в приложении в переменной.

Добавление <cfsavecontent variable="html"> в onRequestStart () и добавление </cfsavecontent> в onRequestEnd () недопустимо, поскольку тег должен быть закрыт в функции.

Возможно ли это сделать?Я пытаюсь избежать жесткого кодирования CFSAVECONTENT на каждой странице .cfm сайта.

Спасибо!

Ответы [ 2 ]

1 голос
/ 17 апреля 2011

Я понимаю, что у этого уже есть принятый ответ, но другой способ сделать это без использования cfinclude состоял бы в том, чтобы использовать объект getPageContext () в onRequestEnd () для захвата сгенерированного содержимого:

<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 снова выведет сгенерированный контент и в итоге отправит две копии вывода вместе.

Я использовал этот методприменять изменения всего сайта к контенту на сайтах в кризис, где поиск каждого экземпляра оригинального контента было недостаточно практичным или своевременным.Его также можно использовать для отправки сгенерированного контента в службу перевода, если это необходимо, до его возвращения конечному пользователю.

1 голос
/ 08 апреля 2011

Alex

Вы можете сделать что-то подобное в 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>
...