ColdFusion能否回答ASP.NET的母版页?

Jos*_*ody 7 coldfusion code-reuse design-patterns master-pages

我正在开发一个用ColdFusion编码的网站.我有一个CSS/HTML模板我想应用于每个页面的内容,而不需要复制任何超过必要的代码.我已经被ASP.NET的母版所破坏了,这将是我实现这个网站的首选方式.不幸的是,我无法使用该选项.这个网站必须在Coldfusion MX 7上运行.此外,领导该项目的开发人员不喜欢Fusebox,因此该选项已经完成.

每个页面上的主导航,图形页眉和页脚都是相同的.标题标签,元标记和二级导航可能因页面而异.除此之外,只有页面的"主要内容区域"会有所不同.

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

Pet*_*ton 12

使用ColdFusion有很多方法可以做到这一点.


Application.cfc在每个请求上执行,并且有两个方法(onRequestStartonRequestEnd),可用于在页面中为主脚本添加/附加内容.

另外值得注意的是,可以扩展/继承Application.cfc,从而允许更复杂的RequestStart/End事件集.更多细节在这里这里.


自定义标签允许您创建一个标签,您可以围绕每个模板来应用布局/等.它还允许属性/ etc定义常见但不断变化的文本.

例如:

<cf_page PageTitle="My Page">
    [main page content]
</cf_page>
Run Code Online (Sandbox Code Playgroud)

在自定义标记(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>
Run Code Online (Sandbox Code Playgroud)

当然,您可以创建多个自定义标记,也可以根据指定的属性以多种方式工作.


Henry已经提到过MVC 框架,但是您不需要使用MVC来使用模板/布局功能.

Fusebox可以做MVC,但它不要求你这样做,无论如何FB的ContentVariables是一个很好的工具来实现模块化内容 - 除非你的首席开发人员可以证明他不喜欢Fusebox(并建议一个更适合你的项目的替代品) !)然后绝对没有理由不去实现它 - 它是一个成熟且众所周知的框架,易于使用,有大量开发人员等等.

但是,如果Fusebox真的不是一个选项,请看看Charlie Arehart的框架列表 - 该页面通常是一个值得关注的大量工具列表.


无论如何,这应该给你足够的东西来考虑...