我工作的一个网站,编ColdFusion.我有一个CSS/HTML模板我想要应用内容的每一页,而不重复的任何更多的代码不是必要的。我已经得到了那种宠坏了ASP.NET's主页,这将是我的首选方式来实施这个网站。不幸的是,这一选项是得不到我。这个网站运行Coldfusion MX7.此外,开发领导该项目并不像保险丝盒,因此这一选择的。

主要的导航图形头,脚注将同在每一页上。标题标记、元的标签,和平-2导航很可能会有所不同,从页页。除此之外,只有一页的"主要内容的区域"会有所不同。

鉴于这些参数,如何,我可以代码,该网站最大的可维护性?

有帮助吗?

解决方案

有一个巨大数量的方式这样做ColdFusion.


应用程序。氟氯化碳 执行上的每一个要求,并具有两个方法(onRequestStartonRequestEnd),可以用来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框架发明在计算器上。 : - )

你可以尝试一视框架与模板的支持(几乎每个人都有的话)。

ColdBox, 模型胶, 马赫-II, 保险丝盒...

帆船论坛港口的比较 页强调了每一个框架处理模板...

签出CFINCLUDE

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top