不ColdFusion有一个答案ASP.NET's主页吗?
-
22-08-2019 - |
题
我工作的一个网站,编ColdFusion.我有一个CSS/HTML模板我想要应用内容的每一页,而不重复的任何更多的代码不是必要的。我已经得到了那种宠坏了ASP.NET's主页,这将是我的首选方式来实施这个网站。不幸的是,这一选项是得不到我。这个网站运行Coldfusion MX7.此外,开发领导该项目并不像保险丝盒,因此这一选择的。
主要的导航图形头,脚注将同在每一页上。标题标记、元的标签,和平-2导航很可能会有所不同,从页页。除此之外,只有一页的"主要内容的区域"会有所不同。
鉴于这些参数,如何,我可以代码,该网站最大的可维护性?
解决方案
有一个巨大数量的方式这样做ColdFusion.
应用程序。氟氯化碳 执行上的每一个要求,并具有两个方法(onRequestStart
和 onRequestEnd
),可以用来prepend/附加的内容主要剧本中的页。
还值得注意,它可以延长/继承你的应用程序。氟氯化碳,允许出于更复杂的RequestStart/端事件。 更多详细信息在这里 和 在这里,.
定制标签 让你创建一个标记,你可以环绕每个模板应用的布局。它还允许性/等,以确定共同但改变文本。
例如:
<cf_page PageTitle="My Page">
[main page content]
</cf_page>
和内部的定制标签(页。cfm)你有:
<cfif ThisTag.ExecutionMode EQ 'start'>
<cfparam name="Attributes.PageTitle" default=""/>
<cfcontent reset/><cfoutput><!DOCTYPE html>
<html>
<head>
<title>My Website - #Attributes.PageTitle</title>
[styles and scripts and stuff]
</head>
<body>
<div id="heading">
<img src="my_website_logo.png" alt="My Website"/>
</div>
<ul id="mainmenu" class="nav">
[menu]
</ul>
<h1>#Attribute.PageTitle#</h1>
</cfoutput>
<cfelse>
<cfoutput>
<div id="footer">
[footer]
</div>
</body></html></cfoutput>
</cfif>
当然您可以创建多个定义的标签,或者一个标记工作以多种方式根据的属性规定。
亨利已经提到的视 框架, 但你不需要做视使用的模板/布局的功能。
保险丝盒 可以做的视,但它没有 需要 你这样做,而不管怎么说FB的ContentVariables是一个很好的工具,用于实现模块的内容-除非你的领导,开发商可以 证明 他不喜欢保险丝盒(和建议的一个替代办法适合项目的更好!) 然后是绝对没有理由不去了-这是一个成熟的和众所周知的框架,便于使用,大量的开发,等等。
但是,如果保险丝盒真是不是一种选择,一起来看看 查理Arehart的名单的框架 -那一页,一般是一个巨大的名单的工具,值得一看。
无论如何,这应该给你足够的要考虑的事情现在...
其他提示
ColdFusion开发开始使用称为cf_bodycontent在90年代后期的自定义标签,以避免必须包括独立的页眉和页脚文件。那是在ASP.NET的母版页六,七年。 ; - )
现在有,做同样的事情,本机标签: cfsavecontent 。这里的人们如何使用模板cfsavecontent精髓。
<!--- index.cfm --->
<cfsavecontent variable="content">
<cfinclude template="#url.action#.cfm">
</cfsavecontent>
<cfinclude template="template.cfm">
<!--- template.cfm --->
<cfparam name="title" default="Welcome">
<html>
<head><cfoutput>#title#</cfoutput></head>
<body>
... header, menu, sidebar, whatever ...
<cfoutput>#content#</cfoutput>
... right column, footer ...
</body>
</html>
<!--- foo.cfm --->
<cfset title="Welcome to Foo">
Hello World! I'm the page at index.cfm?action=foo
<!--- bar.cfm --->
<cfset title="Welcome to Bar">
Hello World! I'm the page at index.cfm?action=bar
如果你想要把模板的模板中,添加另一cfsavecontent。
<!--- index.cfm --->
<cfsavecontent variable="content">
<cfinclude template="#url.action#.cfm">
</cfsavecontent>
<cfsavecontent variable="content">
<cfinclude template="internal_template.cfm">
</cfsavecontent>
<cfsavecontent variable="content">
<cfinclude template="master_template.cfm">
</cfsavecontent>
<cfoutput>#content#</cfoutput>
您可以重构削减了冗余。
<!--- index.cfm --->
<cfsavecontent variable="content">
<cfinclude template="#url.action#.cfm">
</cfsavecontent>
<cfparam name="templates" default="internal,master">
<cfloop list="#templates#" index="t">
<cfsavecontent variable="content">
<cfinclude template="#t#_template.cfm">
</cfsavecontent>
</cfloop>
<cfoutput>#content#</cfoutput>
如果你想有一个模板“扩展”另一个,你也许可以通过打开列表成堆叠,并在各模板推其父到堆栈中这样做。
<!--- internal_template.cfm --->
<cfset templates = listAppend("master", templates)>
...
<cfoutput>#content#</cfoutput>
...
<!--- index.cfm --->
<cfsavecontent variable="content">
<cfinclude template="#url.action#.cfm">
</cfsavecontent>
<cfparam name="templates" default="internal">
<cfloop condition="listlen(templates) gt 0">
<cfset t = listFirst(templates)>
<cfset templates = listRest(templates)>
<cfsavecontent variable="content">
<cfinclude template="#t#_template.cfm">
</cfsavecontent>
</cfloop>
<cfoutput>#content#</cfoutput>
和因此你有StackBox,一个ColdFusion框架发明在计算器上。 : - )
签出CFINCLUDE