我的客户有多家公司;不同的名称/徽标等,但网站上的所有内容都是相同的,除了所述名称/徽标。
在ColdFusion环境中,对于我来说,提供相同内容并在运行时更换徽标/公司名称的最佳方式是什么,以便我可以将所有内容保存在一个位置?这是一个jQuery解决方案吗?正则表达式?或者ColdFusion是否允许我基于url和会话变量以有效的方式部署它?
答案 0 :(得分:2)
“最佳”是一个相对术语。有很多方法可以做到这一点。
我可能会在application.cfc文件的onSessionStart()部分使用cgi.host_name上的开关。在会话中存储正确的站点名称,徽标文件,css参考等,并根据需要进行参考。当然,这假定您已经在使用会话。
如果您想要更具体的答案,则需要提供有关您网站上已经发生的事情的更多信息。
答案 1 :(得分:2)
我会推荐类似@Ben Doom建议的东西;虽然不存储在会话范围内。相反,我建议使用应用程序范围。没有理由让每个用户的会话一遍又一遍地重复相同的信息。
通过为同一代码库提供不同的应用程序名称,您可以获得2个不同的“应用程序”(基本上只是不同的地址空间)。正如Ben建议的那样,我将应用程序名称基于CGI变量。使用散列将保证该值可以安全地用作应用程序名称,但不会像打开一样容易。
<强>的Application.cfc:强>
component {
this.name = hash(cgi.server_name);
}
并非所有CGI变量都是安全的 - 有些可以被用户修改(引用,ip等),所以如果你打算使用其中一个,我建议像我一样做哈希以上是为了确保在这里使用安全...但是如果你使用其中一个安全值(比如cgi.server_name),那么你应该安全地使用它而不需要哈希/等。
在这种情况下,设置显示主题以切换正在运行的应用程序会更容易:
<强>的Application.cfc:强>
component {
this.name = cgi.server_name;
}
<强> index.cfm:强>
<cfimport prefix="custom" taglib="#expandPath('./layouts')#" />
<custom:layout theme="#application.applicationname#">
<!--- your content here --->
</custom:layout>
<强>布局/ layout.cfm:强>
<cfparam name="attributes.theme" default="www.site1.com" />
<cfif attributes.theme eq "www.site1.com">
<!--- include content for this theme --->
<cfelse>
<!--- include content for this theme --->
</cfif>
(在Win7 / IIS7上测试)
答案 2 :(得分:1)
使用ANT script复制正确的徽标并在部署时替换正确的名称?
或者,使用Coldbox environment detection支持,并根据URL路径加载不同的配置文件?