存储站点特定的配置数据的最佳方式很可能将是创建一个新的组件命名的东西,例如SiteConfig .cfc使用方法如getProperty(propertyName)和setProperty(propertyName,value)。这样,你会做存储这个CFC的应用范围的Application.cfc的onApplicationStart方法里面如下所示:
<cfset application.siteConfig = createObject("component", "SiteConfig").init() />
回到你原来的问题,虽然关于应用范围存储UDF,下面是一个办法做到那。基础是,在onApplicationStart您将创建一个新的应用程序持久化结构与您的网站的配置属性,如siteName和其他任何。然后一个函数被存储在CFM文件中,该文件仅包含在onApplicationStart中,然后被复制到应用程序范围中。这意味着您的所有常规页面CFM文件都可以使用application.getProperty(propertyName)。 由于该函数只创建一次并存储在应用程序范围内,因此它满足了原始问题关于“仅在应用程序启动时才会进行分配”的要求。
希望这会有所帮助!
getProperty.function.cfm
<cffunction name="getProperty" output="false">
<cfargument name="propertyName" type="string" required="true" />
<cfreturn application.config[propertyName] />
</cffunction>
的Application.cfc
<cffunction name="onApplicationStart" output="false">
<cfset application.config = structNew() />
<cfset application.config.siteName = "My App's Display Name" />
<cfinclude template="getProperty.function.cfm" />
<cfset application.getProperty = variables.getProperty />
</cffunction>
test.cfm
<cfset propertyValue = application.getProperty("siteName") />
<cfdump var="#propertyValue#" />
谢谢Greg。从本质上讲,它是一个代码库,它将运行多个网站并根据URL进行更改。所以一个特定的网站会有自己特有的信息(例如网站名称)。 – 2010-03-15 22:04:45
感谢您的额外信息汤姆。我已经更新了上面的答案。不确定从单个代码库管理多个站点的最佳方式,但希望这可以帮助您顺其自然。 – sqrl0 2010-03-15 22:53:33
谢谢Greg。这很好,它回答了这个问题,并给出了一个更好的方法来做到这一点。 – 2010-03-16 09:52:15