好的,我有模板文件,知道需要在<cfoutput>标记之间放置一个<cfoutput>标记,但是在<cfinclude>周围放置<cfoutput>标记是行不通的,带有<cfmodule>的任何东西都不能工作,因为这不允许我操作variables范围。
所以,任何想法--不管多么复杂--都允许我包含这样一个模板文件,让它表现得就像在<cfoutput>标记之间一样吗?
上下文:这是我正在开发的“框架”,要求每个模板文件都以<cfoutput>标记开头和结尾似乎是一种浪费,特别是因为模板文件看起来越“冷”,IMO就越好。
发布于 2013-04-23 01:15:56
我打算建议使用render()选项,但请注意,这在OpenBDML中是一个非常糟糕的功能(或者他们想将其称为CFML版本的任何东西),我认为应该避免。我看不出它如何不会导致每个请求都重新编译CFML,这是一种helluva开销。我认为最好在标记保存/读取时修改它,以便将其包装/解压缩到<cfoutput>标记中,这样只有在文件实际更改时才会重新编译它。这会比它读的要少得多。
在您的问题的提示下,我使用了对CFML编译过程做了一些修改。,说明了为什么将<cfoutput>标记放在单独的文件中不起作用。很抱歉,我们花了很长时间才写完这篇文章,并在这里作了跟进。
发布于 2013-04-25 13:12:01
我们在车轮上所做的就是用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-22 22:24:21
找到了解决此问题的OpenBD特定方法。显然,我不是唯一遇到这个问题的人,OpenBD包含一个有用的渲染(),它负责评估cfml内容。所以我最后
<cfset cfml = fileRead(expandPath(...))>
...
<cfoutput>#render("<cfoutput>"&cfml&"</cfoutput>")#</cfoutput>这不是一个很好的解决方案,因为我破坏了引擎本来会做的每页编译,但是,由于cfml在这些页面上相对简单,我认为这不是太大的问题。至少,与实际将文件写入磁盘相比,它对性能的影响更小。
https://stackoverflow.com/questions/16156592
复制相似问题