cfInclude没有cfoutput标签

时间:2013-04-22 20:58:35

标签: coldfusion cfml openbd

好的,我有知道的模板文件需要在<cfoutput>个标签之间,但在<cfoutput>周围放置一个<cfinclude>标签不会工作,<cfmodule>的任何内容都无效,因为我无法操纵variables范围。

那么,任何想法 - 无论多么复杂 - 都可以让我包含这样一个模板文件并让它像<cfoutput>标签之间那样表现?


上下文:这是我正在研究的'框架'并要求每个模板文件以<cfoutput>标签开头和结尾似乎是真正的浪费,尤其因为少了'coldfusiony'模板文件看起来越好,IMO。

3 个答案:

答案 0 :(得分:6)

我打算建议使用render()选项,但需要注意的是OpenBDML中的一些功能非常糟糕(或者他们想要称之为CFML的版本),我认为应该避免。我无法看到它是如何导致每次请求都不重新编译CFML的,这是一个很大的开销。我认为你最好在保存/读取时将修改标记为<cfoutput>标记包装/解包,这样生成的CFML只会在文件实际更改时重新编译。这将比阅读时少得多。

根据您的问题提示,我做了a bit of a write up on the CFML compile process,说明为什么在单独的文件中使用<cfoutput>标签不起作用。道歉,写了很长时间才写完&amp;跟进此处。

答案 1 :(得分:1)

我们在轮子中做的只是用cfoflude包装cfsavecontent标签

<cffunction name="renderInclude">
  <cfargument name="template" value="string" required="true">
  <cfset var myOutput = "">

  <cfsavecontent variable="myOutput"><cfoutput><cfinclude template="#arguments.template#"></cfoutput></cfsavecontent>


  <cfreturn trim(myOutput)>
</cffunction>

答案 2 :(得分:0)

找到解决此问题的OpenBD具体方法。显然,我不是唯一遇到此问题的人,而OpenBD包含一个有用的render(),负责评估cfml内容。所以我最终得到了

<cfset cfml = fileRead(expandPath(...))>
...
<cfoutput>#render("<cfoutput>"&cfml&"</cfoutput>")#</cfoutput>

这不是一个漂亮的解决方案,因为我破坏了引擎本来会进行的每页编译,但是因为cfml在这些页面上相对简单,我认为这不是一个太大的问题。至少它应该比实际将文件写入磁盘的性能更低。