1

好的,我有模板文件,我知道它们需要在标签之间,但是在 a周围<cfoutput>放置标签是行不通的,任何带有 a 的东西都行不通,因为这不允许我操纵范围。<cfoutput><cfinclude><cfmodule>variables

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


一点上下文:这是我正在研究的“框架”,并且要求每个模板文件都以<cfoutput>标签开头和结尾似乎是一种真正的浪费,特别是因为模板文件看起来越不“冷融合”,IMO就越好。

4

3 回答 3

6

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

根据您的问题,我写了一些关于 CFML 编译过程的文章,说明了为什么将<cfoutput>标签放在单独的文件中不起作用。很抱歉花了这么长时间来写和跟进这里。

于 2013-04-23T01:15:56.673 回答
2

我们在轮子中所做的只是用 cfsavecontent 标记包装 cfinclude

<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>
于 2013-04-25T13:12:01.350 回答
0

找到了解决此问题的OpenBD特定方法。显然我不是唯一遇到这个问题的人,OpenBD 包含一个有用的render()负责评估 cfml 内容。所以我结束了

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

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

于 2013-04-22T22:24:21.743 回答