如何以编程方式在ColdFusion中包含页眉和页脚文件?

时间:2013-12-05 17:27:50

标签: html coldfusion include coldfusion-10

我正在尝试找出在页面上同时包含头文件和页脚文件的最佳方法,而不必在每个页面上包含两个cfinclude。基本上,我希望当前页面只是内容。我找到了一种方法,通过将以下代码放在application.cfm文件中来实现这一点,但我想知道这样做是否有任何性能或技术含义。有没有更好的方法来实现这个目标?

application.cfm

<cfset application.header = "/someApplication/applicationHeader.cfm">
<cfset application.footer = "/someApplication/applicationFooter.cfm">

<cfinclude template="#application.header#">
<cfinclude template="#CGI.PATH_INFO#">
<cfinclude template="#application.footer#">

<!--- somewhat of a hack to make the page content load with the header and footer automatically inserted in the proper places. 
The cfabort prevents the actual page from being loaded a 2nd time.  --->
<cfabort>

2 个答案:

答案 0 :(得分:4)

您可能需要考虑一个像chris建议的框架。但如果你没有时间开始阅读,学习等......这可能比上面的解决方案更清晰。

制作template.cfm文件并将其放在根文件夹(或模板文件夹)中

Template.cfm

<html>
<head>
</head>
<body>
<div>Your header stuff here</div>

<div><cfoutput>#attributes.mainContent#</cfoutput></div>

<div>Your footer stuff here</div>
</body>
</html>

在您的个人页面中,您可以设置如下内容:

Index.cfm

<cfsavecontent variable="maincontent">
All your HTML and stuff goes here
</cfsavecontent>

<cfmodule template="template.cfm"  mainContent="#maincontent#">

这将是一个非常简单的实施方案,可以让您拥有网站的主模板。如果你愿意的话,你的标题内容和页脚内容也可以是该页面上的cfinclude标签。

CFMODULE也有更高级的用途,例如发送集合而不是单个变量。

答案 1 :(得分:3)

克里斯有一个很好的建议。实际上,如果你查看大多数框架的代码,你会看到类似于你建议的方法。还有一些事情需要考虑。

首先,考虑使用Application.cfc而不是Application.cfm。 Application.cfc具有“onRequestStart()”和“onRequestEnd()”函数,这些函数可以在开头(标题)和结尾(foooter)以及“onRequest()”函数中激活,您可以在其中放置内容包括。这对我来说似乎更合理,并且按照您的寻找方式进行组织。

其次,上面的代码取决于“cgi.path_info” - 这会给线路前端带来一些安全问题。这个变量是由CF创建的,但它是通过解析URL创建的 - 所以有人可能会想出如何将文件包含在合法的Web文件中。一个常见的例子是CF的“temp”文件夹(存在于大多数CF服务器上的公共路径中)。使用这种方法结合一些聪明的上传,一个好的黑客甚至可以获得任意代码来执行。

最后,如果使用application.cfc不是你的一杯茶,你可以很容易地使用自定义标签。自定义标签具有开始和结束“执行模式” - 因此您可以在标签内添加:

<cfif thistag.executionmode IS "start">
... write out your header code
<Cfselseif thistag.executionmode is "end">
... write out your footer code
</cfif>

要使用它,您可以将您的path_info包括在内:

<!--- name of your custom tag --->
<!--- spits out header here --->
<cf_mytagfilename>

<!--- tacks on content from this include into the buffer --->
<cfinclude template="#cgi.path_info#"/>

<!--- spits out footer here --->
</cf_mytagfilename>

这种和许多其他方法一起用于ColdFusion。 CF非常灵活,在这类事情上提供了许多可能性。我想这都是祝福和诅咒:)祝你好运!